Использование функции external() с многопараметрической функцией
Предположим, что у вас есть функция f<- function(x,y,z) { ... }
. Как бы вы пошли, передавая константу одному аргументу, но позволяя другим меняться? Другими словами, я хотел бы сделать что-то вроде этого:
output <- outer(x,y,f(x,y,z=2))
Этот код не оценивает, но есть ли способ сделать это?
Ответы
Ответ 1
outer(x, y, f, z=2)
Аргументы после функции являются дополнительными аргументами к ней, см. ...
в ?outer
. Этот синтаксис очень распространен в R, все семейство apply
работает одинаково, например.
Update:
Я не могу точно сказать, что вы хотите выполнить в своем последующем вопросе, но подумайте, что решение этой формы, вероятно, вам следует использовать.
outer(sigma_int, theta_int, function(s,t)
dmvnorm(y, rep(0, n), y_mat(n, lambda, t, s)))
Это вычисляет матрицу дисперсии для каждой комбинации значений в sigma_int
и theta_int
, использует эту матрицу для определения долготы и оценивает ее в точках (точках), определенных в y
. Я не смог его протестировать, так как не знаю типов и размеров переменных.
Ответ 2
outer
(наряду с применяемым семейством функций и другими) передаст дополнительные аргументы в функции, которые они назовут. Однако, если вы имеете дело с случаем, когда это не поддерживается (optim
является одним из примеров), вы можете использовать более общий подход к каррированию. Для создания функции необходимо создать новую функцию, которая имеет (некоторые из) фиксированных переменных и, следовательно, имеет меньше параметров.
library("functional")
output <- outer(x,y,Curry(f,z=2))