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/