如何自动以当前时间设置随机种子?

3
每次打开 R 控制台时,随机种子都会设置为相同的值。在我的电脑上(你的电脑可能也是如此),如果我运行 rnorm(1),第一次调用总是返回 0.1777571
我尝试使用计算机当前时间自动设置随机种子,例如添加以下内容:
set.seed(
   as.integer(
      as.numeric(
         gsub("[^0-9]","",paste(format(Sys.time(), "%Y %X %x")))
      )%%.Machine$integer.max
   )
)

我在.Rprofile文件中设置了种子,但并没有产生任何变化。第一次调用rnorm(1)总是返回0.1777571

我该如何自动将随机种子设置为计算机当前时间?

编辑

我直接在终端上打开R会话。我只需按下r键,不需要显式加载任何先前的工作区。

1个回答

6
set.seed的文档提到了一些有趣的事情:

最初,没有种子;当需要时,从当前时间和进程ID创建一个新的种子。因此,默认情况下,不同的会话将给出不同的模拟结果。但是,如果恢复了先前保存的工作区,则可能会从先前的会话中恢复种子。

您描述的行为与在加载先前的工作区时恢复以前版本的.Random.seed一致,这似乎必须在运行.RProfile中的代码之后发生。
另一个有趣的事情是,文档建议仅使用set.seed(NULL)将以更少的工作完成您想要的事情。
这是一个关于此的R邮件列表线程:https://stat.ethz.ch/pipermail/r-help/2010-October/255734.html

嗯...好吧,我并没有显式地加载任何工作区。我只是在bash中按下r键,在终端窗口中打开一个新会话。 - Remi.b
2
@Remi.b,您不需要显式加载先前保存的工作区,它将作为启动过程的一部分加载。请参见我在编辑中添加的链接。如果您正在加载的工作区没有可见对象,则可能甚至不会注意到它——除了它正在恢复隐藏的.Random.seed - John Coleman
好的!谢谢。现在你这么说我看到当我打开R时它写着“[先前保存的工作区已恢复]”。我删除了文件/Users/remi/.RData,问题得到解决! - Remi.b
精准诊断 - Ben Bolker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接