我有一个看起来像这样的脚本:
#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分钟的待机时间。 (因此我的不可复制的例子)。但是当我运行脚本时,查看结果,然后再次运行它,再次查看结果,它们略有不同。为什么?我设定了种子!种子会以某种方式重置吗?我是否需要在每个脚本文件中指定种子?
我需要增加代表的数量,因为很清楚我没有充分融合。但这是一个单独的问题。为什么我的结果不能自我复制,我该如何解决?
提前致谢。
编辑:我正在通过doMC
和plyr
进行并行化。根据以下评论进行的一些轻微的谷歌搜索显示,人们无法使用这些包真正设置“并行种子”。我需要以某种方式将代码迁移到SNOW
。如果有人知道doMC
和plyr
的解决方案,我会很高兴知道它是什么。
答案 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