在不同版本的R(和Ubuntu)上set.seed是否一致?

时间:2017-11-09 10:26:50

标签: r ubuntu random-seed

我目前正在运行R版本3.1.0(在Ubuntu 12.04 LTS上),因为我的R版本和我的操作系统都变得相当陈旧,我计划更新两者。但是,我有很多依赖于set.seed()的模拟,我希望他们在更新R和我的操作系统之后仍然给我相同的随机数。

所以我的问题是三倍。

  1. 我可以更新R而不更改从每个种子生成的数字吗?
  2. 我可以为我的操作系统做同样的事吗?
  3. 如果不是1)或2),是否有办法改变我的代码中的种子,使其与旧种子一致?

2 个答案:

答案 0 :(得分:3)

跨OS一致性:是

如果在没有手动更改默认值或RProfile的情况下将R安装在两个不同的操作系统上,则使用set.seed()时应获得相同的结果。

R版本之间的一致性:不一定

过去,set.seed()在R版本中会给出相同的结果,但是由于R 3.6.0中的一个小宣布更新,这种情况通常不再适用。因此,您可以比较R 3.6.0之前的结果,获得跨版本一致性,但是如果将set.seed()在3.6.0之后的使用与set.seed()在3.6.0之前的使用进行比较,您将获得结果不同。

您可以在以下示例中看到这一点:

R 3.2.0

> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"

R 3.5.3

> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"

R 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")

R 3.6.0

> 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"

答案 1 :(得分:2)

在几个R版本(3.1.0,3.3.1,3.4.2)和两台不同的机器(Windows 7 x64,Windows 10 x64)上测试后,我得到了相同的runif()个随机数字set.seed()独立于R版本和操作系统。据我所知,这表明问题1和2都是肯定的。