set.seed 在不同版本的 R(和 Ubuntu)上是否一致? [英] Is set.seed consistent over different versions of R (and Ubuntu)?
问题描述
我目前运行的是 R 版本 3.1.0(在 Ubuntu 12.04 LTS 上),由于我的 R 版本和我的操作系统都很旧,我计划同时更新两者.但是,我有很多依赖于 set.seed() 的模拟,我希望它们在更新 R 和我的操作系统后仍然给我相同的随机数.
I am currently running R version 3.1.0 (on Ubuntu 12.04 LTS) and as both my R version and my operating system is getting rather old, I plan on updating both. However, I have a lot of simulations that rely on set.seed() and I would like them to still give me the same random numbers after updating both R and my operating system.
所以我的问题是三重的.
So my question is three-fold.
- 我可以在不更改每个种子生成的数字的情况下更新 R 吗?
- 我可以为我的操作系统做同样的事情吗?
- 如果 1) 或 2) 都不是,有没有办法更改我代码中的种子,使其与旧种子一致?
推荐答案
跨操作系统一致性:是
如果您在两个不同的操作系统上安装了 R,而没有手动更改默认值或 RProfile
,则在使用 set.seed()
时应该得到相同的结果.
Cross-OS consistency: yes
If you installed R on two different operating systems without manually changing defaults or the RProfile
, you should get the same results when using set.seed()
.
过去的情况是 set.seed()
会在 R 版本中给出相同的结果,但由于 R 3.6.0 中的一个小宣布更新,这种情况不再普遍.因此,您可以获得 R 3.6.0 之前的跨版本一致性比较结果,但是如果将 3.6.0 之后的 set.seed()
使用与 3.6.0 之前的 set.seed()
,你会得到不同的结果.
It used to be the case that set.seed()
would give the same results across R versions, but that's no longer generally true thanks to a little-announced update in R 3.6.0. So you can get cross version consistency comparing results before R 3.6.0, but if you compare a post-3.6.0 use of set.seed()
to a pre-3.6.0 use of set.seed()
, you will get different results.
您可以在下面的示例中看到这一点:
You can see that in the examples below:
> 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 中,默认类型的底层随机数生成器已更改.现在,为了让 set.seed()
的结果匹配,你必须首先调用函数 RNGkind(sample.kind = "Rounding")
.
The reason for the inconsistency is that in R 3.6.0, the default kind of under-the-hood random-number generator was changed. Now, in order to get the results from set.seed()
to match, you have to first call the function 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"
这篇关于set.seed 在不同版本的 R(和 Ubuntu)上是否一致?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!