R种子sedding没有“设置”,结果没有再现

时间:2013-04-10 05:01:43

标签: r random parallel-processing

我有一个看起来像这样的脚本:

#This is the master script.  It runs all other scripts.
rm(list=ls()) 

#Run data cleaing script
source("datacleaning.R")

set.seed(413) #Seed pre-selected as lead author's wife's birthday (April 13th)
reps=128

#Make imputated datasets
source("makeimps.R")

#Model selection step 1.  
source("model_selection.1.R")
load("AIC_results.1")
AIC_results

#best model removed the year interaction

#Model selection step 2.  removed year interaction
source("model_selection.2.R")
load("AIC_results.2")
AIC_results

#all interactions pretty good.  keeping this model

#Final selected model:
source("selectedmodel.R")

我将此主脚本发送到超级计算群集; 32核上需要大约17个小时的CPU时间和40分钟的待机时间。 (因此我的不可复制的例子)。但是当我运行脚本时,查看结果,然后再次运行它,再次查看结果,它们略有不同。为什么?我设定了种子!种子会以某种方式重置吗?我是否需要在每个脚本文件中指定种子?

我需要增加代表的数量,因为很清楚我没有充分融合。但这是一个单独的问题。为什么我的结果不能自我复制,我该如何解决?

提前致谢。

编辑:我正在通过doMCplyr进行并行化。根据以下评论进行的一些轻微的谷歌搜索显示,人们无法使用这些包真正设置“并行种子”。我需要以某种方式将代码迁移到SNOW。如果有人知道doMCplyr的解决方案,我会很高兴知道它是什么。

1 个答案:

答案 0 :(得分:2)

查看专为此类可重现的并行计算而开发的doRNG包。在调用循环中设置种子,您将能够完全重现结果...

require(doParallel)
require(doRNG)
cl <- makeCluster(4)
registerDoParallel(cl)


unlist( foreach( i = 1:4 , .options.RNG = 413 ) %dorng% { runif(1) } )
#[1] 0.5251507 0.4326805 0.6409496 0.5523651

unlist( foreach( i = 1:4 , .options.RNG = 413 ) %dorng% { runif(1) } )
#[1] 0.5251507 0.4326805 0.6409496 0.5523651