我正在使用R语言中的
我可以使用
例如,这是使用
上面两个代码块唯一的区别是第二个使用了
parallel
包中的mclapply()
并行运行模拟程序,希望能够跟踪每个函数调用的进度。因此,我决定改用pbmcapply
包中的pbmclapply()
,以便每次运行模拟时都有一个进度条(pbmclapply()
是为mclapply()
特别创建的包装器,因此它们应该具有相同的功能,除了进度条)。我可以使用
mclapply()
设置种子并得到可重复的结果,没有任何问题,但奇怪的是,每次运行pbmclapply()
都会得到不同的结果。下面是一个相当简单的 reprex 示例。例如,这是使用
mcapply()
:## GIVES THE SAME RESULT EACH TIME IT IS RUN
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))
使用 pbmclapply()
的代码与上述代码相同:
## GIVES DIFFERENT RESULTS EACH TIME IT IS RUN
library(pbmcapply)
RNGkind("L'Ecuyer-CMRG")
set.seed(1)
x <- pbmclapply(1:100, function(i) {rnorm(1)}, mc.cores = 2)
y <- do.call(rbind, x)
z <- mean(y)
print(mean(z))
上面两个代码块唯一的区别是第二个使用了
pbmclapply()
,而第一个使用了mclapply()
。然而,每次运行第一个块时都会得到一致的结果,而每次运行第二个块时都会得到不同的结果(尽管种子设置方式相同)。这两个函数之间播种程序有什么区别?我希望能得到任何关于发生这种情况的反馈。谢谢!