我想使用snow::clusterApply
. 我的函数在函数的一部分中使用临时(预定义)种子,但通常应保持独立的随机数。每个“工作”的临时种子不同。
我可以执行以下操作:
# 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 集群中的统一随机数生成”部分中给出的链接,我阅读了“默认的随机数生成器可能非常相关”并且应该使用额外的包,例如 package rlecuyer
。
现在,如果我尝试将其包含在我的代码中,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)
当我需要在工作的基础上而不是在通话之前给他们打电话时,我该如何解决set.seed
或并行工作?withSeed
clusterApply