我理解什么set.seed()做什么以及什么时候可以使用它,但我仍然有很多关于功能的问题.以下是一些:
set.seed()如果您set.seed()之前在会话中打过电话,是否可以"重置" 为"更随机"的内容?这甚至是必要的吗?set.seed()允许字母数字种子,可以在random.org上输入它们的方式(确保你处于高级模式,并看到表格的"第3部分",看看我的意思)?我有一个包含内部循环的外部 foreach/dopar 并行循环。内部循环的每个实例都应该处理同一组随机数。其余部分,即外部主体的其余部分和并行实例应照常工作,即具有独立的随机数。
我可以在非并行实现中实现这一点,方法是在内循环开始之前保存 RNG 的状态,并在执行内循环的每个实例之后恢复该状态。请参见以下示例:
library(doSNOW)
seed = 4711
cl = makeCluster(2)
registerDoSNOW(cl)
clusterSetupRNGstream (cl, seed=rep(seed,6))
erg = foreach(irun = 1:3,.combine = rbind) %dopar% {
#do some random stuff in outer loop
smp = runif(1)
# save current state of RNG
s = .Random.seed
# inner loop, does some more random stuff
idx = numeric(5)
for(ii in seq.int(5)) {
idx[ii] = sample.int(10, 1)
# reset RNG for next loop iteration
set.seed(s)
}
c(smp,idx)
}
> print(erg)
[,1] [,2] [,3] …Run Code Online (Sandbox Code Playgroud)