У меня есть список функцийПрименять список n функций к каждой строке кадра данных?
funs <- list(fn1 = function(x) x^2,
fn2 = function(x) x^3,
fn3 = function(x) sin(x),
fn4 = function(x) x+1)
#in reality these are all f = splinefun()
И у меня есть dataframe:
mydata <- data.frame(x1 = c(1, 2, 3, 2),
x2 = c(3, 2, 1, 0),
x3 = c(1, 2, 2, 3),
x4 = c(1, 2, 1, 2))
#actually a 500x15 dataframe of 500 samples from 15 parameters
Для каждого из I строк, я хотел бы, чтобы оценить функцию J на каждом из j и суммировать результаты:
unlist(funs)
attach(mydata)
a <- rep(NA,4)
for (i in 1:4) {
a[i] <- sum(fn1(x1[i]), fn2(x2[i]), fn3(x3[i]), fn4(x4[i]))
}
Как я могу сделать это эффективно? Это подходящий случай для реализации функций plyr
? Если да, то как?
вопрос бонуса: почему a[4]
NA
?
Это подходящее время для использования функций от plyr
, если да, то как я могу это сделать?
@abe для третьего фрагмента кода, вам нужно либо «unlist (funs)», либо «attach (mydata)» или использовать 'funs $ fn1' и' mydata $ x1' –
@ David благодарит за исправление, I изменили код, чтобы отразить это, но это именно беспорядок, которого я бы хотел избежать. – Abe
Ну, для бонусной точки ответ заключается в том, что в mydata $ x4 нет ни одного элемента, ни одного из столбцов этого фрейма. Еще один комментарий .. просто ввод unlist (funs) ничего не делает, если вы не присваиваете результат чему-либо. Добро пожаловать в функциональное программирование. –