Ich laufe auf Probleme laufen dopar
innerhalb einer Funktion, bei der Registrierung doRNG
und ich muss auf eine Variable zugreifen, die innerhalb der Funktion erstellt wird.R doRNG kann keine Variable finden
Mein übergeordnetes Ziel ist es, doRNG
zu verwenden, um sicherzustellen, dass meine parallelen Prozesse verschiedene Ströme von Zufallszahlen erhalten. Wenn es also einen besseren Weg gibt, löst das auch mein Problem.
Ich wäre sekundär daran interessiert, warum die Verwendung doRNG
schlägt fehl, weil ich versuche zu verstehen, wie Umgebungen in parallele Prozesse exportiert werden.
Der Code hier sieht ein bisschen künstlich aus, aber das ist eine Zusammenfassung eines viel größeren und komplexeren Codes.
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)
Hinweis, wenn ich die doRNG
Zeilen auf Kommentar, wird der Code in Ordnung. Auch der Wechsel von %dopar%
zu %do%
(und doRNG
Zeilen unkommentiert) funktioniert.
ich folgend:
Error in { : task 1 failed - "object 'lclVar' not found"
Die Verwendung von '% dorng%' anstelle von '% dopar%' ergibt keinen Fehler. Versuchte das? –
@J_F eigentlich das mein Problem behoben. Also wird die Umgebung nicht auf die gleiche Weise weitergegeben, wenn Dopar von dorng gewickelt wird? Wie auch immer, das war eine schnelle Lösung für das Problem, danke! –