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

Correct way to generate parallel random booleans

从这个 q () 开始,我有一些模拟随机布尔值的代码。因为我希望大量且快速地执行此操作,所以我希望将其包装在这样的函数中:

# 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)

并使用 parallel 中的 clusterMap() 对其进行并行化。现在这没问题了,我有这个工作,但是我担心通过并行执行,我的布尔值不再足够 "random" 了。我可以在网上找到很多关于并行生成随机数的信息,但它们似乎都描述了一次生成大量随机数,而且我无法将其与每次绘制相对较少的随机布尔值的函数联系起来 运行。我在这里有问题吗?我需要做一些不同的事情吗?

您只需要在创建集群之后 运行 函数之前使用 clusterSetRNGStream(cl)