tengo una lista de funciones¿Aplica una lista de n funciones a cada fila de un marco de datos?
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()
Y tengo una trama de datos:
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
Para cada uno de i filas, me gustaría función de evaluar j en cada uno de los j columnas y sumar los resultados:
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]))
}
¿Cómo puedo hacer esto de manera eficiente? ¿Es esta una ocasión apropiada para implementar las funciones plyr
? ¿Si es así, cómo?
pregunta de bonificación: ¿por qué es a[4]
NA
?
¿Es este un momento apropiado para usar las funciones de plyr
, de ser así, cómo puedo hacerlo?
@abe para el tercer fragmento de código, necesita 'unlist (funs)' y 'attach (mydata)' o usar 'funs $ fn1' y' mydata $ x1' –
@David gracias por la corrección, I han cambiado el código para reflejar esto, pero este es exactamente el desorden que me gustaría evitar. – Abe
Bueno, para el punto de bonificación, la respuesta es que no hay 4º elemento en mydata $ x4 ni ninguna de las columnas de ese marco de datos. Un comentario adicional ... simplemente escribiendo unlist (funs) no hace nada a menos que asigne el resultado a algo. Bienvenido a la programación funcional. –