生成并行随机布尔值的正确方法

时间:2015-06-12 17:30:50

标签: r random parallel-processing

从这个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对其进行并行化。现在这没问题,我有这个工作,但是我担心通过并行执行,我的布尔值不再是“随机”了。我可以在网上找到很多关于并行生成随机数的信息,但它们似乎都描述了一次生成大量随机数,我无法将其与我的函数相关联,每次运行时都会抽取相对较少的随机数。我有问题吗?我需要做些不同的事情吗?

1 个答案:

答案 0 :(得分:1)

您只需在创建群集之后和运行功能之前使用clusterSetRNGStream(cl)