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 en me basant sur un exemple en ligne, mais je ne suis pas sûr que la syntaxe soit 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)
}
Merci pour vos commentaires. J'ai regardé parallel
après avoir posté cette question.
Finalement, après quelques essais, je l'ai fait tourner. J'ai ajouté le code ci-dessous au cas où il serait 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 indiquant que si l'utilisateur alloue trop de processus, il est possible que l'utilisateur obtienne cette erreur: Error in serialize(data, node$con) : error writing to connection
Remarque - Si .combine
Dans l'instruction foreach
est rbind
, le dernier objet renvoyé aurait été créé en ajoutant la sortie de chaque boucle rangée.
J'espère que cela sera utile pour les personnes essayant 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-in-parallel-processing-with-r /