191 votes

Appeler la fonction "apply-like" sur chaque ligne du dataframe avec plusieurs arguments de chaque ligne.

J'ai un cadre de données avec plusieurs colonnes. Pour chaque ligne du cadre de données, je veux appeler une fonction sur la ligne, et l'entrée de la fonction utilise plusieurs colonnes de cette ligne. Par exemple, disons que j'ai ces données et ce testFunc qui accepte deux arguments :

> 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

Disons que je veux appliquer cette testFunc aux colonnes x et z. Donc, pour la ligne 1, je veux 1+5, et pour la ligne 2, je veux 2 + 6. Existe-t-il un moyen de faire cela sans écrire une boucle for, peut-être avec la famille de fonctions apply ?

J'ai essayé ça :

> 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

Mais j'ai eu une erreur, des idées ?

EDITAR: la fonction réelle que je veux appeler n'est pas une simple somme, mais c'est un test de puissance.t. J'ai utilisé a+b juste à titre d'exemple. L'objectif final est de pouvoir faire quelque chose comme ceci (écrit en pseudocode) :

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
))

où le résultat est un vecteur de sorties pour le test power.t pour chaque ligne de df.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X