Tengo un marco de datos con varias columnas. Para cada fila en el marco de datos, quiero llamar a una función en la fila, y la entrada de la función está usando múltiples columnas de esa fila. Por ejemplo, digamos que tengo estos datos y este testFunc que acepta dos argumentos:
> df <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6))
> df
x y z
1 1 3 5
2 2 4 6
> testFunc <- function(a, b) a + b
Digamos que quiero aplicar este testFunc a las columnas xyz. Entonces, para la fila 1 quiero 1 + 5, y para la fila 2 quiero 2 + 6. ¿Hay alguna manera de hacer esto sin escribir un bucle for, tal vez con la familia de funciones apply?
Intenté esto:
> df[,c('x','z')]
x z
1 1 5
2 2 6
> lapply(df[,c('x','z')], testFunc)
Error in a + b : 'b' is missing
Pero tiene error, alguna idea?
EDITAR: la función real que quiero llamar no es una suma simple, sino que es power.t.test. Usé a + b solo por ejemplo. El objetivo final es poder hacer algo como esto (escrito en pseudocódigo):
df = data.frame(
delta=c(delta_values),
power=c(power_values),
sig.level=c(sig.level_values)
)
lapply(df, power.t.test(delta_from_each_row_of_df,
power_from_each_row_of_df,
sig.level_from_each_row_of_df
))
donde el resultado es un vector de salidas para power.t.test para cada fila de df.
dplyr
camino.