Согласован ли set.seed с разными версиями R (и Ubuntu)?

В настоящее время я использую R версии 3.1.0 (в Ubuntu 12.04 LTS), и поскольку и моя версия R, и моя операционная система устаревают, я планирую обновить обе. Однако у меня есть много симуляций, основанных на set.seed (), и я хотел бы, чтобы они по-прежнему выдавали мне те же случайные числа после обновления R и моей операционной системы.

Итак, у меня тройной вопрос.

  1. Могу ли я обновить R, не меняя числа, генерируемые каждым семенем?
  2. Могу ли я сделать то же самое для моей операционной системы?
  3. Если нет ни 1), ни 2), есть ли способ изменить семена в моем коде таким образом, чтобы они соответствовали старым семенам?

person Phil    schedule 09.11.2017    source источник
comment
Генерация случайных чисел выполняется с использованием алгоритма. set.seed() передает ему семя. Следовательно, это не должно зависеть от версии ОС и R. Итак, 1. Да. 2. Да.   -  person Suren    schedule 09.11.2017


Ответы (2)


Согласованность между ОС: да

Если вы установили R в двух разных операционных системах, не меняя вручную значения по умолчанию или RProfile, вы должны получить те же результаты при использовании set.seed().

Согласованность по версиям R: не обязательно

Раньше было так, что set.seed() давал одинаковые результаты в версиях R, но это больше не так, благодаря немного анонсированному обновлению в R 3.6.0. Таким образом, вы можете получить согласованность между версиями, сравнивая результаты до R 3.6.0, но если вы сравните использование set.seed() после 3.6.0 с использованием set.seed() до 3.6.0, вы получите разные результаты.

Вы можете увидеть это в примерах ниже:

R 3.2.0

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

R 3.5.3

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

R 3.6.0

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

Причина несоответствия в том, что в R 3.6.0 изменен скрытый по умолчанию генератор случайных чисел. Теперь, чтобы результаты set.seed() совпадали, вы должны сначала вызвать функцию RNGkind(sample.kind = "Rounding").

R 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"
person bschneidr    schedule 30.05.2019

Протестировав несколько версий R (3.1.0, 3.3.1, 3.4.2) и двух разных машинах (Windows 7 x64, Windows 10 x64), я получил одинаковые runif() случайные числа с одинаковыми set.seed() независимо от версий R и операционная система. Насколько мне известно, это означает, что да и на вопросы 1, и на 2.

person cdermont    schedule 09.11.2017
comment
Спасибо за ваш ответ. Я понял, что это можно довольно легко проверить. Итак, я запустил set.seed (75842) rnorm (3) На двух компьютерах, используя разные операционные системы и разные версии R. В обоих случаях я получил [1] 1.5704983 -0.9103801 0.6197490 Таким образом, похоже, что обновление с та точка зрения. - person Phil; 09.11.2017