想象一下,我们正在进行多个处理过程,我想在程序开始时设置一个总体种子,如下所示:
当然,在一个块内,
假设
mylist <- list( as.list(rep(NA,3)), as.list(rep(NA,3)) )
foo <- function(x){ for(i in 1:length(x)){
x[[i]] <- sample(100,1)
}
return(x)
}
# start block
set.seed(1)
l1 <- lapply(mylist, foo)
l2 <- lapply(mylist, foo)
# end
当然,在一个块内,
l1
和l2
是不同的,但如果我再次运行上面的块,l1
将与之前相同,l2
也将与之前相同。假设
foo
非常耗时,所以我想使用mclapply
而不是lapply
,因此我执行以下操作:library(parallel)
# start block
set.seed(1)
mclapply(mylist , foo, mc.cores = 3)
mclapply(mylist , foo, mc.cores = 3)
# end
如果我再次运行此代码块,下一次将得到不同的结果。如何产生与使用lapply
设置一个总体种子相同的行为,但使用mclappy
。我已经查看了mclapply
文档,但我不确定,因为使用:
set.seed(1)
l1 <- mclapply(mylist , foo, mc.cores = 3, mc.set.seed=FALSE)
l2 <- mclapply(mylist , foo, mc.cores = 3, mc.set.seed=FALSE)
结果是l1
和l2
相同,这不是我想要的...
clusterSetupRNG
... https://dev59.com/62sy5IYBdhLWcg3wtwa9 - user20650doRNG参考手册
的第三页。 或使用snow
。 - user20650?'%dorng%'
的帮助页面给出了一个例子。 - user20650