Не думаю, что это дубликат, так как я хочу, чтобы фактический код / текст не оценивался.
Я строю функцию, которая требует, чтобы входные данные были похожи на следующие:
compss[[1]](x[1],x[2])
Где compss - это список функций, и я вызываю первую функцию в списке и использую параметры x [1] и x [2].
Вопрос
Я хочу построить общий случай так, чтобы, когда у меня было более 2 переменных, я получал:
compss[[1]](x[1],x[2],x[3],.....)
(Как, например, я набираю n = 5, и я получаюфактический код выше, но с точностью до x [5])
Мой неудачный подход
Поэтому моя первоначальная мысль - сначала создать вектор с n "x [i]'s',
argss <- NULL
for (i in 1:length(variable.limits)){
argss <- c(argss, text = paste("x","[", i, "]", sep =""))
}
Что дает:
"x[1]" "x[2]" ....
Тогда я подумал, что использование разбора поможет, но это дает:
expression(x[1], x[2])
Что было бы хорошои я мог бы использовать do.call и т. д. Но проблема в том, что я просто хочу символы / объекты / переменные там.Причина в том, что я запускаю это в функции оптимизации, где x [1] не имеет заданного значения, и поэтому do.call, похоже, не работает.Есть идеи?
Комментарии отклика
В ответ на комментарии r2evans решение использовать:
list_of_xs <- list(x[1], x[2], x[3])
do.call(compss[[1]], list_of_xs)
Вероятно, это лучший способ решитьэто, так что теперь остается только один вопрос: как обобщить «list_of_xs».
Мой пример использования - разработка функции стоимости для нелинейного программирования:
func <- function(x){
x[1]*x[2]*x[3] + (x[1]^2 - x[3]*x[2])
}
Но япытаясь спроектировать это в моей структуре, чтобы это работало для общих задач, где у нас может быть, скажем, х [100].Пакет, который я использую, а именно «nloptr», требует от вас ввода функции стоимости в определенной форме, я думаю, я новичок в этом пакете.