我想知道如何使结果可重现。我运行了多次,结果向量却不同。感谢任何帮助。
cl <- makeCluster(2)
registerDoParallel(2)
set.seed(123)
results <- unlist(llply(seq_along(1:4), .fun = function(x){
runif(1)} ,.parallel = T,
.paropts = list(.export=ls(.GlobalEnv))))
stopCluster(cl)
我想知道如何使结果可重现。我运行了多次,结果向量却不同。感谢任何帮助。
cl <- makeCluster(2)
registerDoParallel(2)
set.seed(123)
results <- unlist(llply(seq_along(1:4), .fun = function(x){
runif(1)} ,.parallel = T,
.paropts = list(.export=ls(.GlobalEnv))))
stopCluster(cl)
library(plyr)
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
opts <- list(preschedule=TRUE)
clusterSetRNGStream(cl, 123)
r <- llply(1:20,
.fun = function(x) runif(10),
.parallel = TRUE,
.paropts = list(.options.snow=opts))
需要使用preschedule=TRUE
选项,以防止doParallel使用负载平衡,这会使任务与工作进程的映射变得不可预测。
如果您正在使用Linux或Mac OS X并希望doParallel使用mclapply
,则可以使用以下方法:
if (.Platform$OS.type != "windows") {
registerDoParallel(2)
RNGkind("L'Ecuyer-CMRG")
set.seed(123)
mc.reset.stream()
r <- llply(1:20,
.fun = function(x) runif(10),
.parallel = TRUE)
}
mclapply
默认使用预调度。在Windows系统上无法工作,因为doParallel将隐式创建一个集群对象,而RNG初始化不会产生任何影响。registerDoParallel(cl)
,否则doParallel将在Posix计算机上使用mclapply
,或在Windows计算机上隐式创建一个集群对象。明显,初始化实际执行并行计算的集群工作者非常重要。