Одно и то же случайное число каждый раз - PullRequest
3 голосов
/ 11 января 2012

я запускаю скрипт из командной строки через R CMD BATCH script.in.R script.out.R &

У меня есть следующая строка, которая выбирает 12 случайных идентификаторов строк и сортирует их:

test.index<-sort(sample(1:nrow(recoded),12))

Каждый раз, когда я не меняю сценарий, он выплевывает одни и те же 12 чисел. Если я немного изменю это (поменяю метку, строку или что-то еще), то цифры будут другими ... Мне нужно, чтобы они каждый раз были разными!

Есть идеи?

Ответы [ 3 ]

16 голосов
/ 11 января 2012

Это звучит странно. Что делает остальная часть сценария? Если он вызывает (или какую-то другую функцию, которую он вызывает) set.seed, это объясняет, но поскольку вы говорите об изменении (то, что я предполагаю) данных , это будет означать, что начальное число установлено на какой-то хэш вашего набора данных ?! Или это если вы поменяете скрипт каким-либо образом?

В любом случае, вы можете вставить строку наподобие rm(.Random.seed, envir=globalenv()) перед вашим вызовом на sample, что должно сбросить начальное число на случайное ...

Другой способ - создать уникальное семя самостоятельно. Вот один из способов, основанный на времени и идентификаторе процесса.

 set.seed( as.integer((as.double(Sys.time())*1000+Sys.getpid()) %% 2^31) )
5 голосов
/ 11 января 2012

У вас, вероятно, есть звонок на set.seed().Вот пример:

$ Rscript -e 'runif(4)'      
[1] 0.639716 0.976892 0.486573 0.525979

$ Rscript -e 'runif(4)'
[1] 0.516927 0.951013 0.931756 0.741650

$ Rscript -e 'runif(4)'
[1] 0.159682 0.314798 0.356476 0.584326

$ Rscript -e 'set.seed(42); runif(4)'
[1] 0.914806 0.937075 0.286140 0.830448

$ Rscript -e 'set.seed(42); runif(4)'
[1] 0.914806 0.937075 0.286140 0.830448

$ 

Первые три все отличаются, затем я применяю общее начальное число и presto числа идентичны.

Также, Rscriptлучше, чем R CMD BATCH.

0 голосов
/ 22 февраля 2017

Проверьте, не загружено ли ранее какое-либо рабочее пространство. Если у вас есть, предыдущее начальное число также загружается, что дает вам те же результаты.

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