2017-01-20 12 views
1

У меня есть скрипт, загружающий файл RData. Этот файл RData был сгенерирован другим скриптом, используя функцию save.image. Когда я запускаю скрипт, загружающий файл RData, rnorm дает мне идентичный вывод при каждом запуске.Генераторы случайных чисел в R, такие как rnorm, дающие идентичный результат при повторных прогонах

Вот простой пример.

Сценарий для создания файла RDATA,

rm(list = ls()) 
save.image('test.RData') 

скрипт, который загружает RDATA и вызывает RNorm,

rm(list = ls()) 
load('test.RData') 
input = rnorm(10) 
print(input) 

Я нашел один способ обойти это использовать сохранить, а не save.image в первый скрипт. Однако это не очень удобно, потому что я не всегда заранее знаю, какие объекты из моей среды я хочу сохранить. Но я определенно хотел бы использовать rnorm для использования другого семени каждый раз, когда я запускаю второй скрипт.

ответ

3

, вероятно, самый простой способ сделать это переинициализировать семя (которое хранится в изображении, и поэтому восстановленное при загрузке его):

set.seed(NULL) 

перед вызовом RNorm. Так что ваш код должен быть изменен на

rm(list = ls()) 
load('test.RData') 
set.seed(NULL) 
input = rnorm(10) 
print(input) 

Edit: Другой вариант изменить сценарий, генерирующий файл RDATA путем добавления rm(.Random.seed) немедленно перед save.image() вызова. Это гарантирует, что всякий раз, когда изображение загружается, семя PRNG (генератор псевдослучайных чисел) не изменяется. Таким образом, при загрузке изображения сценария не нужно ничего делать, чтобы использовать различную последовательность псевдослучайных чисел для каждого исполнения. Какое из двух решений более подходит для вас, вероятно, зависит от вашего конкретного варианта использования.

+0

Рекомендуемым способом повторной инициализации семени является 'set.seed (NULL)'; см. документацию. – Roland

+0

Спасибо! - Соответственно изменил мой ответ. –

+0

Спасибо! Это отвечает на мой вопрос. –

 Смежные вопросы

  • Нет связанных вопросов^_^