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é ceci basé sur un exemple en ligne, mais je ne suis pas sûr si la syntaxe est correcte. Il n'a pas non plus beaucoup augmenté la vitesse.

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

   cbind(finalMatrix, tempMatrix)

}
24
demandé sur nrussell 2016-07-12 03:20:15

1 réponses

Merci pour vos commentaires. J'ai cherché parallel après avoir posté cette question.

Enfin, après quelques essais, je l'ai eu en cours d'exécution. J'ai ajouté le code ci-dessous au cas où il serait utile aux 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

Note-Si .combine dans l'instruction foreach est rbind, alors l'objet final retourné aurait été créé en ajoutant la sortie de chaque ligne de boucle.

J'espère que cela est utile pour les gens qui essaient 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/

37
répondu kay 2016-07-12 17:57:33