2012-01-10 3 views
3

Я бегу сценарий из командной строки с помощью R CMD BATCH script.in.R script.out.R &Одинаковые случайных чисел Каждый раз, когда

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

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

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

Любые идеи?

+0

Выполняется ли такое же поведение, если вы запускаете скрипт в интерактивном сеансе R? –

+1

И, конечно, у вас есть более 12 строк в 'recoded', не так ли? В противном случае эта строка кода просто выплюнет от 1 до 12. –

+0

Также попробуйте изменить сценарий на * именно эту строку *, чтобы подтвердить, что проблема действительно в другом месте. –

ответ

15

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

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

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

set.seed(as.integer((as.double(Sys.time())*1000+Sys.getpid()) %% 2^31)) 
5

Возможно, вам звонят 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 

$ 

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

Кроме того, Rscript является более приятным, чем R CMD BATCH.

+0

Это менее вероятно, но это также может быть вызвано не сбросом случайного семени в скомпилированном коде, который вызывается. –

+0

Я немного смущен (извините моего новичка), все кажется обратным от того, что я хотел. По умолчанию ваши были случайными, и тогда вам нужно было что-то сделать, чтобы сделать их одинаковыми ... Я в замешательстве. Я не установил семя, но мои номера всегда одинаковы! – JoshDG

+0

@ user964373 Dirk иллюстрирует, что в вашем коде может быть вызов 'set.seed()'. Если вы удалите его, вы должны получить значения, которые отличаются при каждом прогоне. – Iterator

0

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

+1

Это будет комментарий, а не ответ. –

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