我目前正在运行R版本3.1.0(在Ubuntu 12.04 LTS上),因为我的R版本和我的操作系统都变得相当陈旧,我计划更新两者。但是,我有很多依赖于set.seed()的模拟,我希望他们在更新R和我的操作系统之后仍然给我相同的随机数。
所以我的问题是三倍。
答案 0 :(得分:3)
如果在没有手动更改默认值或RProfile
的情况下将R安装在两个不同的操作系统上,则使用set.seed()
时应获得相同的结果。
过去,set.seed()
在R版本中会给出相同的结果,但是由于R 3.6.0中的一个小宣布更新,这种情况通常不再适用。因此,您可以比较R 3.6.0之前的结果,获得跨版本一致性,但是如果将set.seed()
在3.6.0之后的使用与set.seed()
在3.6.0之前的使用进行比较,您将获得结果不同。
您可以在以下示例中看到这一点:
> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"
> set.seed(1999)
> sample(LETTERS, 3)
[1] "T" "N" "L"
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")
。
> 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都是肯定的。