簡體   English   中英

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 和我的操作系統后仍然給我相同的隨機數。

所以我的問題是三重的。

  1. 我可以在不更改每個種子生成的數字的情況下更新 R 嗎?
  2. 我可以為我的操作系統做同樣的事情嗎?
  3. 如果 1) 或 2) 不是,有沒有辦法改變我代碼中的種子,使它們與舊種子一致?

跨操作系統一致性:是

如果您在兩個不同的操作系統上安裝了 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()使用進行set.seed() ,您將得到不同的結果。

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

3.2.0

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

3.5.3

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

3.6.0

set.seed(1999)
sample(LETTERS, 3)
[1] "D" "Z" "R"

不一致的原因是在 R 3.6.0 中, 默認的底層隨機數生成器類型已更改 現在,為了從set.seed()獲得匹配的結果,您必須首先調用函數RNGkind(sample.kind = "Rounding")

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"

在多個 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM