【问题标题】:Same seed, different OS, different random numbers in RR中相同的种子,不同的操作系统,不同的随机数
【发布时间】:2018-07-15 12:24:06
【问题描述】:

我在两台机器和一个 linux 服务器之间遇到了不一致的结果,直到我意识到修复种子有不同的效果。我在所有这些中运行不同的R 版本,都在3.3.0 以上。以下是示例:

Linux 1

> set.seed(10); rnorm(1)
[1] -0.4463588
> version
               _
platform       x86_64-pc-linux-gnu
arch           x86_64
os             linux-gnu
system         x86_64, linux-gnu
status
major          3
minor          3.0
year           2016
month          05
day            03
svn rev        70573
language       R
version.string R version 3.3.0 (2016-05-03)
nickname       Supposedly Educational

Linux 2

> set.seed(10); rnorm(1)
[1] 0.01874617
> version
               _
platform       x86_64-pc-linux-gnu
arch           x86_64
os             linux-gnu
system         x86_64, linux-gnu
status
major          3
minor          4.2
year           2017
month          09
day            28
svn rev        73368
language       R
version.string R version 3.4.2 (2017-09-28)
nickname       Short Summer

Mac 操作系统

> set.seed(10); rnorm(1)
[1] 0.01874617
> version
               _                           
platform       x86_64-apple-darwin15.6.0   
arch           x86_64                      
os             darwin15.6.0                
system         x86_64, darwin15.6.0        
status                                     
major          3                           
minor          4.3                         
year           2017                        
month          11                          
day            30                          
svn rev        73796                       
language       R                           
version.string R version 3.4.3 (2017-11-30)
nickname       Kite-Eating Tree        

Windows

> set.seed(10); rnorm(1)
[1] 0.01874617
> version
               _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          4.1                         
year           2017                        
month          06                          
day            30                          
svn rev        72865                       
language       R                           
version.string R version 3.4.1 (2017-06-30)
nickname       Single Candle               

Linux 从同一个种子生成不同的随机数,因此在其上运行的脚本的结果无法完全重现(取决于重新运行它们的操作系统,结果是否一致)。这很烦人。

我不知道这里发生了什么。特别是:

  • (1) 是R 的版本有问题还是其他相关问题?
  • (2) 如何避免这种不一致的行为?感谢您提供任何帮助。

EDIT 源自@Jesse Tweedle 的回答(在 Linux 1 中的新会话中输出):

> set.seed(10); rnorm(1)
[1] -0.4463588
> set.seed(10); rnorm(1)
[1] -0.4463588
> set.seed(102); rnorm(1)
[1] 0.05752965
> set.seed(10, kind = "Mersenne-Twister"); rnorm(1)
[1] 0.01874617
> set.seed(10); rnorm(1)
[1] 0.01874617
> set.seed(102); rnorm(1)
[1] 0.1805229

【问题讨论】:

  • 请参阅stackoverflow.com/questions/47199415/…,了解使用 set.seed 跨操作系统/卢比找到一致随机数的人。
  • 那么你知道 R 是如何安装在 linux 1 上的吗?从源代码构建?它在编译期间是否使用了自定义标志?如果使用标准构建,我希望随机数在所有(最近的)构建中都是相同的。我认为这在 R 中已经很长时间没有改变了。
  • @MrFlick 不幸的是,我不知道R 是如何安装在 Linux 1 上的。

标签: r random operating-system random-seed


【解决方案1】:

来自文档:

Random docs:

RNGversion can be used to set the random generators as they were in an earlier R version (for reproducibility).

所以在所有系统上试试这个:

set.seed(10, kind = "Mersenne-Twister", normal.kind = "Inversion"); rnorm(1)
[1] 0.01874617

【讨论】:

  • 所以如果你在“Linux 1”上调用RNGkind(),它会显示[1] "Mersenne-Twister" "Inversion"? ?
  • 这个!我仍然不知道到底发生了什么,但这可以解决问题。 (我编辑了正确格式的问题)。对您的评论:是的。
  • 好的,太好了。我一开始忘了添加normal.kind 参数(因为您正在生成随机法线,而第二个参数专门用于法线)。 ?
  • @epsilone 请在此处查看答案,了解为什么两个 Linux 结果不同。 stackoverflow.com/a/56381613/5373794
猜你喜欢
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2015-08-09
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多