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

Phi*_*hil 13 ubuntu r random-seed

我当前正在运行R版本3.1.0(在Ubuntu 12.04 LTS上),并且由于我的R版本和操作系统都已经过时,我计划同时更新两者。但是,我有很多依赖set.seed()的模拟,并且我希望它们在更新R和操作系统后仍能给我相同的随机数。

所以我的问题是三个方面。

  1. 我可以在不更改每个种子生成数字的情况下更新R吗?
  2. 我可以对操作系统做同样的事情吗?
  3. 如果对1)或2)否定,是否有办法以与旧种子一致的方式更改代码中的种子?

bsc*_*idr 24

跨操作系统一致性:是

如果在不手动更改默认值或的情况下在两个不同的操作系统上安装了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(),则会得到不同的结果。

您可以在以下示例中看到:

R 3.2.0

> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"
Run Code Online (Sandbox Code Playgroud)

R 3.5.3

> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"
Run Code Online (Sandbox Code Playgroud)

R 3.6.0

set.seed(1999)
sample(LETTERS, 3)
[1] "D" "Z" "R"
Run Code Online (Sandbox Code Playgroud)

不一致的原因是,在R 3.6.0中,更改了引擎盖下随机数生成器的默认类型。现在,为了获得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"
Run Code Online (Sandbox Code Playgroud)