Ich möchte eine Funktion parallel anwenden mit snow::clusterApply
. Meine Funktion verwendet einen temporären (vordefinierten) Seed in einem Teil der Funktion, sollte aber im Allgemeinen unabhängige Zufallszahlen beibehalten. Die temporären Samen unterscheiden sich für jeden "Job".R snow rlecuyer: Funktion mit temporärem Seed anwenden
ich tun kann, folgende:
# setting up cluster of type="SOCK"
library(snow)
cl <- makeSOCKcluster(2)
# this is my function
myfu <- function(seed){
# temporary seed:
x <- R.utils::withSeed(rnorm(10),seed)
# more calculation with independent RNG:
y <- x*rnorm(10)
return(list(stays=x,changes=y))
}
# run example:
seed <- 1:4
data.frame(clusterApply(cl,seed,myfu))
# reproduce
data.frame(clusterApply(cl,seed,myfu))
stopCluster(cl)
Doch nach dem Link in der "Uniform Random Number Generation in SNOW Cluster" in der Paketdokumentation Schnee gegeben (http://homepage.stat.uiowa.edu/~luke/R/cluster/cluster.html), habe ich gelesen, dass „Der Standard Zufallszahlengeneratoren sind wahrscheinlich ziemlich korreliert "und man sollte zusätzliche Pakete verwenden, wie z das Paket rlecuyer
.
Nun, wenn ich versuche, dass in meinem Code enthalten, set.seed
oder withSeed
sind keine Verwendung mehr:
# setting up cluster of type="SOCK"
library(snow)
library(rlecuyer)
cl <- makeSOCKcluster(2)
# setup RNG Stream
clusterSetupRNGstream(cl,seed=1:6)
# run example:
seed <- 1:4
data.frame(clusterApply(cl,seed,myfu))
# can't reproduce
data.frame(clusterApply(cl,seed,myfu))
stopCluster(cl)
Wie kann ich arbeiten, um set.seed
oder withSeed
parallel, wenn ich sie auf einem anrufen müssen Job-Basis und nicht vor dem clusterApply
Anruf?