Mam listę funkcjiZastosuj listę n funkcji do każdego wiersza ramki danych?
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()
I mam 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
dla każdego z I rzędach, chciałbym funkcja oceny j na każdym z j kolumn i suma wyników:
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]))
}
Jak mogę to zrobić wydajnie? Czy jest to odpowiednia okazja do wdrożenia funkcji plyr
? Jeśli tak to jak?
pytanie dodatkowe: dlaczego jest a[4]
NA
?
Czy jest to odpowiedni czas na korzystanie z funkcji od plyr
, jeśli tak, w jaki sposób mogę to zrobić?
@ na trzecim fragmencie kodu, musisz albo "unlist (funs)" i "dołączyć (mydata)' lub użyć 'funs $ fn1' i' mydata $ x1' –
@ David podziękowania za korektę, I zmienili kod, aby to odzwierciedlić, ale to jest właśnie niechlujstwo, którego chciałbym uniknąć. – Abe
Cóż, dla punktu bonusowego odpowiedź brzmi, że nie ma czwartego elementu w mydata $ x4 lub żadnej z kolumn tej ramki danych. Kolejny komentarz ... po prostu wpisując unlist (funs) nic nie robi, chyba że przypisujesz wynik do czegoś. Witamy w programowaniu funkcjonalnym. –