使用dorng包的可重复随机数
我试图使用使用dorng包的可重复随机数,r,random,random-seed,R,Random,Random Seed,我试图使用foreach和dorng包在R中生成一组可重复的随机数。我的期望是,在下面两种情况下,我应该得到相同的随机数。然而,这不是我所看到的 下面是我试图做的简要概述 播种 在循环中,随机睡眠一段时间,得到20个随机数的列表 保存第一个随机数列表 使用不同的随机睡眠持续时间,再次重复步骤1和2中的过程 保存第二个随机数列表 比较第一个和第二个随机数列表 我希望第一组随机数和第二组随机数是相同的。顺序可能会有所不同,因为每个并行进程可能会在随机时间内休眠,并且可能会影响随机数的总体顺序。然而,
foreach
和dorng
包在R中生成一组可重复的随机数。我的期望是,在下面两种情况下,我应该得到相同的随机数。然而,这不是我所看到的
下面是我试图做的简要概述
library(doParallel)
library(doRNG)
library(foreach)
# Make 10 clusters and set them to run in parallel
cl <- makeCluster(10)
registerDoParallel(cl)
## COLLECT THE FIRST SET OF RANDOM NUMBERS
set.seed(123)
# Sleep duration for first sample collection
x <- 0:10
# Generate 10 random numbers after a random amount of sleep
rp1 <- foreach(i=1:20, .combine = 'c', .options.RNG=123) %dorng%{
# Sleep for random duration
Sys.sleep(sample(x))
return(rnorm(10,0,1))
}
## RESET THE SEED AND COLLECT SECOND SET OF RANDOM NUMBERS
set.seed(123)
# Sleep duration for second sample collection
x <- 0:8
# Generate 10 random numbers after a random amount of sleep
rp2 <- foreach(i=1:20, .combine = 'c', .options.RNG=123) %dorng%{
# Sleep for random duration
Sys.sleep(sample(x))
return(rnorm(10,0,1))
}
stopCluster(cl)
# Do a diff between the two sets of random numbers
common <- intersect(rp1,rp2)
print(length(common))
库(双并行)
图书馆(道恩)
图书馆(foreach)
#制作10个集群,并将它们设置为并行运行
这能回答你的问题吗@彼得,似乎是想逃避你所做的linked@Waldi-没错。我这里的示例代码是利用dorng包并遵循文档中的示例..我发布了一个示例代码,因为我得到的结果与您的完全相同,但不理解为什么。我发现了上面代码的问题。sample函数的使用方法不正确,这导致foreach的每次迭代都会绘制不同数量的随机样本,使得rnorm返回的数据在两个测试用例之间有所不同。从foreach循环中删除示例
可以解决此问题。