43 votes

exécuter une boucle for en parallèle dans R

J'ai une boucle for qui ressemble à ceci:

 for (i=1:150000) {
   tempMatrix = {}
   tempMatrix = functionThatDoesSomething() #calling a function
   finalMatrix =  cbind(finalMatrix, tempMatrix)

}
 

Pourriez-vous me dire comment faire ce parallèle?

J'ai essayé cela sur la base d'un exemple en ligne, mais je ne sais pas si la syntaxe est correcte. Cela n'a pas non plus augmenté la vitesse.

 finalMatrix = foreach(i=1:150000, .combine=cbind) %dopar%  {
   tempMatrix = {}
   tempMatrix = functionThatDoesSomething() #calling a function

   cbind(finalMatrix, tempMatrix)

}
 

73voto

kay Points 615

Merci pour vos commentaires. Je n'ai regarder jusqu' parallel après que j'ai posté cette question.

Enfin, après quelques essais, je l'ai eu en cours d'exécution. J'ai ajouté le code ci-dessous dans le cas où il est utile à d'autres

library(foreach)
library(doParallel)

#setup parallel backend to use many processors
cores=detectCores()
cl <- makeCluster(cores[1]-1) #not to overload your computer
registerDoParallel(cl)

finalMatrix <- foreach(i=1:150000, .combine=cbind) %dopar% {
   tempMatrix = functionThatDoesSomething() #calling a function
   #do other things if you want

   tempMatrix #Equivalent to finalMatrix = cbind(finalMatrix, tempMatrix)
}
#stop cluster
stopCluster(cl)

Remarque - je dois ajouter une note que si l'utilisateur affecte trop de processus, alors l'utilisateur peut obtenir cette erreur: Error in serialize(data, node$con) : error writing to connection

Remarque - Si .combine dans la foreach déclaration est - rbind , puis la finale de l'objet retourné aurait été créé en ajoutant de sortie de chaque boucle de la ligne sage.

Espérons que cela est utile pour les gens à essayer le traitement parallèle dans R pour la première fois comme moi.

Références: http://www.r-bloggers.com/parallel-r-loops-for-windows-and-linux/ https://beckmw.wordpress.com/2014/01/21/a-brief-foray-into-parallel-processing-with-r/

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