从这个q(Cannot understand why random number algorithms give different results)开始,我有一些模拟随机布尔值的代码。因为我希望这样做很快,我希望将它包装在一个像这样的函数中:
# setup external to function
number <- 5
probs <- rep(0.1, 5)
# core function
event.sim <- function(var, things){
mod.probs <- probs * var
events <- matrix(rbinom(things*number, 1, probs), ncol=number, byrow=FALSE)
av.events <- max(rowSums(events))
return(av.events)
}
library("parallel")
cl <- makeCluster(4)
clusterExport(cl, c("event.sim", "probs", "number"))
test <- clusterMap(cl, event.sim, var=df1$var1, things=df1$things, SIMPLIFY=TRUE)
stopCluster(cl)
并使用clusterMap()
中的parallel
对其进行并行化。现在这没问题,我有这个工作,但是我担心通过并行执行,我的布尔值不再是“随机”了。我可以在网上找到很多关于并行生成随机数的信息,但它们似乎都描述了一次生成大量随机数,我无法将其与我的函数相关联,每次运行时都会抽取相对较少的随机数。我有问题吗?我需要做些不同的事情吗?
答案 0 :(得分:1)
您只需在创建群集之后和运行功能之前使用clusterSetRNGStream(cl)
。