snow::clusterApply
を使用して並列に関数を適用したい。私の関数は、関数の一部で一時的な(事前定義された)シードを使用しますが、一般的に独立した乱数を保持する必要があります。一時的な種は、それぞれの「仕事」ごとに異なります。R snow rlecuyer:テンポラリーシード付き関数を適用する
私は、次の操作を行うことができます
# 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)
しかし、雪のパッケージのドキュメント(http://homepage.stat.uiowa.edu/~luke/R/cluster/cluster.html)での「SNOW Clustersでの一様乱数の生成」に与えられたリンク以下、私はデフォルトの「という読み乱数ジェネレータは非常に関連性があると思われます。 "パッケージrlecuyer
。今
、私は私のコードでは、set.seed
またはwithSeed
がこれ以上何も使用されていないことなどがしようとした場合:
set.seed
か
withSeed
を回避するにはどうすればよい
# 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)
仕事をしていて、clusterApply
に電話する前ではありませんか?