为什么'load()'函数后的相同随机状态

时间:2018-01-05 17:09:08

标签: r random

将我的.RData文件从光盘加载到R后,我注意到随机生成器在加载工作区后每次都给出相同的数字。

这就是我的意思

load(".../file.RData")
sample(10)
#[1]  9  6  1  7  5  2  8  4 10  3

load(".../file.RData")
sample(10)
#[1]  9  6  1  7  5  2  8  4 10  3

你知道为什么会这样吗?我不记得我使用哪个功能来保存工作区,但我觉得使用save()save.image()的问题。

save.image()是否也会保存随机状态?

2 个答案:

答案 0 :(得分:4)

  

save.image()也会保存随机状态吗?

是的,保存隐藏的对象.Random.seed;请参阅R-help邮件列表中的this discussion

编辑:

根据Gregor的建议,我在该邮件列表讨论中添加建议,使用save(list = ls())代替save.image();它会保存您全局环境中的所有非隐藏对象,这通常是您希望从save.image()完成的操作。

答案 1 :(得分:0)

set.seed(NULL)会重新初始化随机数生成器。所以,

load(".../file.RData")
set.seed(NULL)

可以解决这个问题。

至于savesave.image()之间的差异,?save表示

  

save.image()只是“保存我当前的工作空间”的捷径,即

     

save(list = ls(all.names = TRUE), file = ".RData", envir = .GlobalEnv)