Ho un dataframe con più colonne. Per ogni riga nel frame di dati, desidero chiamare una funzione sulla riga e l'input della funzione utilizza più colonne di quella riga. Ad esempio, supponiamo che io abbia questi dati e questo testFunc che accetta due argomenti:
> 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
Diciamo che voglio applicare questo testFunc alle colonne xe z. Quindi, per la riga 1 voglio 1 + 5, e per la riga 2 voglio 2 + 6. C'è un modo per farlo senza scrivere un ciclo for, forse con la famiglia di funzioni apply?
Ho provato questo:
> 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
Ma hai ricevuto qualche idea?
EDIT: la vera funzione che voglio chiamare non è una semplice somma, ma è power.t.test. Ho usato a + b solo a scopo di esempio. L'obiettivo finale è riuscire a fare qualcosa del genere (scritto in pseudocodice):
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
))
dove il risultato è un vettore di output per power.t.test per ogni riga di df.
dplyr
modo.