Обеспечивает ли функция set.seed () в сочетании с функцией sample () всегда один и тот же образец, независимо от используемого оборудования? - PullRequest
2 голосов
/ 26 мая 2019

Я выполнил команду sample() в сочетании с командой set.seed(), чтобы получить всегда один и тот же образец, и все работало нормально. Однако применение одних и тех же команд на другом ноутбуке дало другой образец. Кто-нибудь знает, что случилось?

Я также попробовал комбинацию set.seed() и rnorm(), но на удивление я получил одинаковые случайные числа на обоих ноутбуках.

set.seed(123)
sample(LETTERS,6)

set.seed(123)
rnorm(6,1,1)

Я ожидал, что на обоих ноутбуках будет показан результат «H», «T», «J», «U», «W», «A». Тем не менее, один ноутбук отображал результат «O», «S», «N», «C», «J», «R».

set.seed(123)
rnorm(6,1,1)

производства

0.4395244 0.7698225 2.5587083 1.0705084 1.1292877 2.7150650

на обоих ноутбуках.

1 Ответ

2 голосов
/ 26 мая 2019

Это происходит не из-за проблем с воспроизводимостью между аппаратными средствами, а из-за разницы, представленной в R 3.6.0 - у вас должен быть один компьютер на R 3.6.0, а другой - в более ранней версии.От help("set.seed") (от R 3.6.0):

Использование

...
set.seed (seed, kind = NULL, normal.kind = NULL,sample.kind = NULL)
...

Подробности

sample.kind может иметь значение «Округление» или «Отклонение», либо частичное совпадение с ними.Первый был по умолчанию в версиях до 3.6.0: он делал выборку заметно неравномерной для больших популяций и должен использоваться только для воспроизведения старых результатов.Для обсуждения см. PR # 17494.

Обратите внимание на следующее, чтобы увидеть разницу в машине (т. Е. Это показывает, что это не кросс-аппаратная проблема, потому что яделать это только на одной машине):

set.seed(123, sample.kind = "Rejection") # Default in R 3.6.0
sample(LETTERS, 6)
# [1] "O" "S" "N" "C" "J" "R"

set.seed(123, sample.kind = "Rounding") # Default in R < 3.6.0
sample(LETTERS, 6)
# [Warning omitted]
# [1] "H" "T" "J" "U" "W" "A"
...