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