Результаты меняются в зависимости от того, указан ли set.seed до или после загрузки файла RData, содержащего .Random.seed - PullRequest
0 голосов
/ 29 апреля 2020

Я запускаю сценарий R, который читает внешний файл RData. Я пытаюсь изменить сценарий R для запуска без использования этого файла RData, чтобы улучшить общность.

Я обнаружил, что результаты, возвращаемые сценарием, различаются в зависимости от того, использую ли я оператор set.seed немедленно до или сразу после загрузки файла RData. Я также обнаружил, что файл RData содержит вектор с именем .Random.seed. В противном случае файл RData содержит, насколько я могу судить, данные, а не какие-либо функции или код.

Простое присутствие вектора .Random.seed в файле RData, по-видимому, меняет результаты случайного выбора. генераторы чисел (runif, rnorm, et c.) или операторы sample в скрипте, которые появляются после того, как я загружаю файл RData, даже если я никогда не ссылаюсь на этот вектор .Random.seed в скрипте.

Как воспроизвести результаты сценария, который содержит файл RData, без фактического включения файла RData в сценарий?

load("CPT CAL.RData")
.Random.seed[1:5]
#[1]         403         493 -1955963110 -1150619109   212268921
sample(1:100, 10, replace = TRUE)
#[1] 100  60  76  39   7  57  28  85  89  73

sample(1:100, 10, replace = TRUE)
#[1] 81 89 15  4 60 32 58 71 62 17

sample(1:100, 10, replace = TRUE)
#[1] 18 46 89 66 23 24 24 41 37 70

##################################

# Here I try to reproduce the above results using the first element
# of the .Random.seed vector as a seed but this does not work
set.seed(403)
sample(1:100, 10, replace = TRUE)
#[1] 44 31 23 83 16 27 71 64 13 18

sample(1:100, 10, replace = TRUE)
#[1] 86 54 46 25 65 42 76 49 46 50

sample(1:100, 10, replace = TRUE)
#[1] 44 44 90 39 46 14 41 52 36 63

1 Ответ

1 голос
/ 29 апреля 2020

@ MrFlick опубликовал очень четкое и очень полезное объяснение того, почему моя первоначальная попытка решения не сработала.

Впоследствии я пришел к решению, адекватному моим целям. Я поместил оператор set.seed сразу после загрузки файла RData в оригинальный скрипт R. Я сохранил результаты в качестве целевых значений.

Затем я добавил тот же оператор set.seed в мою исправленную версию сценария R, который никогда не загружает файл RData.

Оба подходы дали одинаковые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...