212 votes

Pour chaque ligne d’un dataframe R

J’ai peut-être Doing It Wrong™ mais j’ai un dataframe et pour chaque ligne que dataframe je dois faire certains compliqué les recherches et ajouter des données dans un fichier.

Dans mon monde procédurale, je ferais quelque chose comme :

Quel est le moyen de R pour cela ?

Mise à jour avec plus d’informations :

Le dataFrame contient des résultats scientifiques pour certains puits de 96 plaques bien utilisé dans la recherche biologique, donc je veux faire quelque chose comme :

133voto

Jonathan Chang Points 6231

Vous pouvez utiliser le `` fonction :

Mais l’itération sur les lignes directement comme c’est rarement ce que vous voulez ; vous devriez essayer de vectoriser au lieu de cela. Puis-je demander à ce que fait le travail réel de la boucle ?

113voto

Shane Points 40885

Tout d'abord, Jonathan point sur la vectorisation est correct. Si votre getWellID() la fonction est vectorisé, alors vous pouvez passer la boucle et il suffit d'utiliser le chat ou écrire.csv:

write.csv(data.frame(wellid=getWellID(well$name, well$plate), 
         value1=well$value1, value2=well$value2), file=outputFile)

Si getWellID() n'est pas vectorisé, puis Jonathan recommandation d'utilisation de la by ou knguyen proposition de la apply devrait fonctionner.

Sinon, si vous voulez vraiment utiliser for, vous pouvez faire quelque chose comme ceci:

for(i in 1:nrow(dataFrame)) {
    row <- dataFrame[i,]
    # do stuff with row
}

Vous pouvez aussi essayer d'utiliser l' foreach paquet, bien qu'il exige de vous familiariser avec cette syntaxe. Voici un exemple simple:

library(foreach)
d <- data.frame(x=1:10, y=rnorm(10))
s <- foreach(d=iter(d, by='row'), .combine=rbind) %dopar% d

Une dernière possibilité est d'utiliser une fonction de l' plyr paquet, auquel cas la convention sera très similaire à l'application de fonction.

library(plyr)
ddply(dataFrame, .(x), function(x) { # do stuff })

110voto

knguyen Points 793

Vous pouvez essayer ça, à l’aide de `` fonction

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