【发布时间】: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