使用并行包在 R 中进行并行处理 - 无法使用不同数量的内核重现

问题描述

我正在使用 parallel 包和 mclapply() 在 R 中并行处理模拟,使用 R Programming for Data Science(第 22 章,第 22.4.1 节)作为参考。

我按照说明设置了种子,但是,当我更改 mclapply() 函数中使用的核心数时,即使使用相同的种子,我也会得到不同的结果。

一个简单的reprex:

# USING 2 CORES
library(parallel)
RNGkind("L'Ecuyer-CMRG")
set.seed(1)
x <- mclapply(1:100,function(i) {rnorm(1)},mc.cores = 2)
y <- do.call(rbind,x)
z <- mean(y)
print(mean(z))
# returns 0.143

# USING 3 CORES
library(parallel)
RNGkind("L'Ecuyer-CMRG")
set.seed(1)
x <- mclapply(1:100,mc.cores = 3)
y <- do.call(rbind,x)
z <- mean(y)
print(mean(z))
# returns 0.035

如何设置种子,以便更改使用的核心数不会改变结果?我觉得这应该是一件相当简单的事情 - 无论使用的内核数量如何,都可以保持可重复性。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)