我现在运行的是R版本3.1.0(在Ubuntu 12.04 LTS上),由于我的R版本和操作系统都已经很旧了,所以我打算更新它们。但是,我有很多模拟都依赖于set.seed(),我希望它们在更新R和操作系统后仍然给予我相同的随机数。所以我的问题有三个方面。1.我可以更新R而不改变每个种子生成的数字吗?1.我的操作系统也可以这样做吗?1.如果1)或2)的答案都是否定的,是否有办法更改代码中的种子,使它们与奥尔兹的种子保持一致?
nzrxty8p1#
如果您在两个不同的操作系统上安装了R,而没有手动更改默认值或RProfile,则使用set.seed()时应该会得到相同的结果。
RProfile
set.seed()
以前的情况是set.seed()在不同的R版本中会给予相同的结果,但由于R 3.6.0中的一个很少宣布的更新,这种情况不再普遍存在。因此,在比较R 3.6.0之前的结果时,您可以获得跨版本的一致性,但如果您将3.6.0之后使用的set.seed()与3.6.0之前使用的set.seed()进行比较,你会得到不同的结果。您可以在下面的示例中看到这一点:第3.2.0版
> set.seed(1999) > sample(LETTERS, 3) [1] "T" "N" "L"
第3.5.3版
第3.6.0版
set.seed(1999) sample(LETTERS, 3) [1] "D" "Z" "R"
不一致的原因是在R 3.6.0中,the default kind of under-the-hood random-number generator was changed。现在,为了从set.seed()获得匹配的结果,必须首先调用函数RNGkind(sample.kind = "Rounding")。第3.6.0版
RNGkind(sample.kind = "Rounding")
> RNGkind(sample.kind = "Rounding") Warning message: In RNGkind(sample.kind = "Rounding") : non-uniform 'Rounding' sampler used > set.seed(1999) > sample(Letters, 3) [1] "T" "N" "L"
xpcnnkqh2#
在几个R版本(3.1.0、3.3.1、3.4.2)和两台不同的机器(Windows 7 x64、Windows 10 x64)上进行测试后,我得到了相同的runif()随机数,这些随机数与R版本和操作系统无关。
runif()
snvhrwxg3#
如已接受答案中所述,从版本3.6.0开始,采样的默认算法发生了变化:
set.seed(<seed_number_here>, sample.kind = "Rounding")
请注意,sample.kind选项是在3.6.0中添加的,因此您无法在较旧的R版本上使用更新、更好的方法(即,set.seed(<seed_number_here>, sample.kind = "Rejection")在3.6.0之前的R版本中不起作用)。
sample.kind
set.seed(<seed_number_here>, sample.kind = "Rejection")
3条答案
按热度按时间nzrxty8p1#
跨操作系统一致性:是的
如果您在两个不同的操作系统上安装了R,而没有手动更改默认值或
RProfile
,则使用set.seed()
时应该会得到相同的结果。R版本之间的一致性:未必
以前的情况是
set.seed()
在不同的R版本中会给予相同的结果,但由于R 3.6.0中的一个很少宣布的更新,这种情况不再普遍存在。因此,在比较R 3.6.0之前的结果时,您可以获得跨版本的一致性,但如果您将3.6.0之后使用的set.seed()
与3.6.0之前使用的set.seed()
进行比较,你会得到不同的结果。您可以在下面的示例中看到这一点:
第3.2.0版
第3.5.3版
第3.6.0版
不一致的原因是在R 3.6.0中,the default kind of under-the-hood random-number generator was changed。现在,为了从
set.seed()
获得匹配的结果,必须首先调用函数RNGkind(sample.kind = "Rounding")
。第3.6.0版
xpcnnkqh2#
在几个R版本(3.1.0、3.3.1、3.4.2)和两台不同的机器(Windows 7 x64、Windows 10 x64)上进行测试后,我得到了相同的
runif()
随机数,这些随机数与R版本和操作系统无关。snvhrwxg3#
如已接受答案中所述,从版本3.6.0开始,采样的默认算法发生了变化:
在R版本3.6.0及更高版本中,您可以通过在一个行程序中使用旧算法来保持一致性:
请注意,
sample.kind
选项是在3.6.0中添加的,因此您无法在较旧的R版本上使用更新、更好的方法(即,set.seed(<seed_number_here>, sample.kind = "Rejection")
在3.6.0之前的R版本中不起作用)。