С одной стороны, у меня есть функция, аргументами которой являются компоненты вектора. Эта функция похожа на эту:
y_fun = function( x1, x2, x3, x4 ) 2*x1 + x2*x3*log( x4 )
С другой стороны, у меня нет есть компоненты
x1 = x2 = x3 = x4 = 1
но только вектор (с этими компонентами), заданный как:
vect = c(x1, x2, x3, x4)
Для моей цели не очень практично вводить одно за другим значения компонентов вектора в аргументы функции. Как можно вычислить функцию над элементами заданного вектора? Я пробовал это (без успеха):
y_fun( as.list( vect ) )
и это
elements = noquote( paste0( vect, collapse = ",") )
y_fun( elements )
Мы можем использовать do.call
do.call(y_fun, as.list(vect))
[1] 2
vect
создается как безымянный вектор. Это работает для этого случая, но может быть лучше иметь именованный вектор на случай, если у функции много аргументов, а аргументы, переданные в vect
, не в том же порядке.
vect <- c(x1 = x1, x2 = x2, x3 = x3, x4 = x4)
Или просто имя list
lst1 <- list(x1 = x1, x2 = x2, x3 = x3, x4 = x4)
do.call(y_fun, lst1)
Это хорошее решение, которое работает очень хорошо, спасибо. Да, имена тоже полезны...