如何在目标中获取随机生成器当前状态的种子以将其置于set.seed()函数中

时间:2014-07-02 19:23:11

标签: r random

我必须多次重复一些基于伪随机数的统计程序(大约100 000),这个程序是用纯R编写的。每一步(有10万步或称之为迭代)之后我想得到最新的随机生成器的状态(我认为种子是合适的),在这一步/迭代程序后,我只收集整个输出的一部分,因为它太大而无法存储(它的值是优化目标函数和其他一些统计数据)。在检查总输出(长度为100 000)之后,我想再次选择最佳解决方案并运行相应的程序,为此我需要设置对应于选择解决方案的随机发生器的状态。有set.seed但获得种子并不是直截了当的,有.Random.seed但是它如何帮助解决上述问题呢?

1 个答案:

答案 0 :(得分:2)

在每次迭代开始时调用set.seed(x)。确保您可以在开始此过程之前识别所使用的种子,以便以后可以使用它。例如:

for (seed in seeds) {
  set.seed(i)
  print(sprintf('using seed = %d\n', seed))
  do_your_stuff(...)
}

在评论中你问:

  

如何以适当的方式选择种子 - 不应该是一些“随机”素数而不是简单的整数序列(如果我们谈论含有种子的载体)?

如果seeds只是一个序列(如1:100)或随机素数,我不确定这是多么重要。据我所知,任何种子编号X都与其他Y一样好。但是如果这对你很重要,那么你可以从某个地方获取素数列表(例如here)并使用sample随机化它们,例如:

seeds <- sample(c(7, 17, 19, 23, 1019, 1021))