Je rencontre des problèmes en cours d'exécution dopar
à l'intérieur d'une fonction, lors de l'enregistrement doRNG
et j'ai besoin d'accéder à une variable qui est créée à l'intérieur de la fonction.R doRNG impossible de trouver la variable
Mon objectif général ici est d'utiliser doRNG
pour m'assurer que mes processus parallèles obtiennent différents flux de nombres aléatoires, donc s'il y a une meilleure façon de le faire, cela résoudra aussi mon problème.
Je serais secondairement intéressé par pourquoi l'utilisation doRNG
échoue, parce que j'essaie de comprendre comment les environnements sont exportés vers des processus parallèles.
Le code est un peu artificiel mais résume un code beaucoup plus grand et plus complexe.
library(doParallel)
library(foreach)
cl <- makePSOCKcluster(2)
registerDoParallel(cl)
#if I comment out these two lines, code runs fine
library(doRNG)
registerDoRNG()
gVar <- 'gVar'
cols <- matrix(1:10,nrow=2)
res <- apply(cols,2,
function(col) {
lclVar <- sum(col)
res <- foreach(i=icount(2),
.export=c('gVar'), #'lclVar'
.combine='c') %dopar% { #change to %do% also works
return(sprintf('%s %s %s',gVar,lclVar,i))
}
return(res)
})
print(res)
stopCluster(cl)
Remarque si je commente les doRNG
lignes, le code fonctionne très bien. Passant également de %dopar%
à %do%
(et laissant doRNG
lignes décommentées) fonctionne.
Je reçois les suivantes:
Error in { : task 1 failed - "object 'lclVar' not found"
J'ai essayé ça? –
@J_F effectivement qui a résolu mon problème. Donc, d'une manière ou d'une autre, l'environnement ne se transmet pas de la même manière quand Dopar encapsule le dopar? Quoi qu'il en soit, c'était une solution rapide à la question, merci! –