[英]Is set.seed consistent over different versions of R (and Ubuntu)?
我目前正在運行 R 版本 3.1.0(在 Ubuntu 12.04 LTS 上),由於我的 R 版本和我的操作系統都變得很舊,我計划更新兩者。 但是,我有很多依賴於 set.seed() 的模擬,我希望它們在更新 R 和我的操作系統后仍然給我相同的隨機數。
所以我的問題是三重的。
如果您在兩個不同的操作系統上安裝了 R 而沒有手動更改默認值或RProfile
,則在使用set.seed()
時應該得到相同的結果。
過去的情況是set.seed()
會在 R 版本中給出相同的結果,但由於 R 3.6.0 中的一個小宣布更新,這種情況不再普遍。 因此,您可以獲得 R 3.6.0 之前的跨版本一致性比較結果,但是如果將 3.6.0 之后的set.seed()
使用與 3.6.0 之前的set.seed()
使用進行set.seed()
,您將得到不同的結果。
您可以在下面的示例中看到:
> 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 中, 默認的底層隨機數生成器類型已更改。 現在,為了從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"
在多個 R 版本(3.1.0、3.3.1、3.4.2)和兩台不同的機器(Windows 7 x64、Windows 10 x64)上進行測試后,我得到了相同的runif()
隨機數和相同的set.seed()
獨立於 R 版本和操作系統。 據我所知,這表明對問題 1 和 2 都是肯定的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.