我目前正在运行R版本3.1.0(在Ubuntu12.04 LTS上),由于我的R版本和我的操作系统都变得相当旧,我计划同时更新这两个版本。然而,我有很多模拟都依赖于set.seed(),我希望他们在更新R和我的操作系统后仍然能给我相同的随机数
所以我的问题有三个方面
- 我可以在不更改每个种子生成的数字的情况下更新R吗
- 我可以对我的操作系统执行同样的操作吗
- 如果1)或2)为否,是否有办法更改代码中的种子,使其与旧种子一致
跨操作系统一致性:是
如果在两个不同的操作系统上安装了R,而没有手动更改默认值或R配置文件,则使用set.seed()时应该会得到相同的结果
R版本的一致性:不一定
过去的情况是,set.seed()会在R版本中给出相同的结果,但由于R3.6.0中发布了一个小小的更新,这种情况已不再普遍存在。因此,您可以在R3.6.0之前获得跨版本一致性比较结果,但如果将3.6.0之后使用的set.seed()与3.6.0之前使用的set.seed()进行比较,您将得到不同的结果
您可以在下面的示例中看到:
R 3.2.0
>;种子集(1999)
&燃气轮机;样本(字母,3)
[1] “T”“N”“L”
R 3.5.3
>;种子集(1999)
&燃气轮机;样本(字母,3)
[1] “T”“N”“L”
R 3.6.0
set.seed(1999年)
样本(字母,3)
[1] “D”“Z”“R”
不一致的原因是在R3.6.0中,更改了默认类型的引擎盖下随机数生成器。现在,为了从set.seed()获得匹配的结果,必须首先调用函数RNGkind(sample.kind=“Rounding”)
R 3.6.0
>;RNGkind(sample.kind=“舍入”)
警告信息:
在RNGkind(sample.kind=“舍入”):使用非均匀“舍入”取样器
&燃气轮机;种子集(1999)
&燃气轮机;样本(字母,3)
[1] “T”“N”“L”