Одно и то же начальное число, другая ОС, разные случайные числа в R

У меня были противоречивые результаты между двумя машинами и сервером 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 OS

> 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

person epsilone    schedule 05.02.2018    source источник
comment
См. stackoverflow.com/questions/47199415/ для тех, кто находит согласованные случайные числа с помощью set.seed в разных операционных системах и операционных системах.   -  person Jesse Tweedle    schedule 05.02.2018
comment
Итак, вы знаете, как R был установлен в Linux 1? Создан из исходников? Использовались ли пользовательские флаги во время компиляции? Если вы используете стандартную сборку, я бы ожидал, что случайные числа будут одинаковыми для всех (недавних) сборок. Я не думаю, что это изменилось в R за долгое время.   -  person MrFlick    schedule 05.02.2018
comment
@MrFlick К сожалению, я не знаю, как R был установлен в Linux 1.   -  person epsilone    schedule 05.02.2018


Ответы (1)


Из документов:

Случайные документы:

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
person Jesse Tweedle    schedule 05.02.2018
comment
Итак, если вы вызываете RNGkind() в Linux 1, он говорит [1] "Mersenne-Twister" "Inversion"? ???? - person Jesse Tweedle; 05.02.2018
comment
Этот! Я до сих пор не знаю, что именно происходило, но это помогает. (Редактирую вопрос для правильного формата). На ваш комментарий: да, это так. - person epsilone; 05.02.2018
comment
Ок, отлично. Я забыл сначала добавить аргумент normal.kind (поскольку вы генерируете случайные нормали, а второй аргумент предназначен специально для нормалей). ???? - person Jesse Tweedle; 05.02.2018