每次都是相同的随机数

时间:2012-01-10 20:50:34

标签: r

我正在从命令行运行脚本 R CMD BATCH script.in.R script.out.R &

我有以下行,它选择12个随机行ID并对它们进行排序:

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

如果我不更改脚本,它每次都会吐出相同的12个数字。如果我稍微更改它(更改标签或字符串或任何东西),那么数字就不同了......我每次都需要它们不同!

有什么想法吗?

3 个答案:

答案 0 :(得分:16)

这听起来很奇怪。脚本的其余部分在做什么?如果它调用(或它调用的其他函数)set.seed,这将解释事情,但是因为你说改变(我假设是)数据,这意味着种子设置为数据集的某些哈希值?!或者是否以任何方式更改脚本

无论如何,您可以在致电rm(.Random.seed, envir=globalenv())之前插入sample之类的行,这会将种子重置为随机的......

另一种方法是自己生成一个独特的种子。这是基于时间和流程ID的一种方式。

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

答案 1 :(得分: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

$ 

前三个都不同,然后我强制执行一个共同的种子, presto 数字是相同的。

此外,RscriptR CMD BATCH更好。

答案 2 :(得分:0)

检查您是否未加载任何先前的工作区。如果有,也会加载前一个种子,从而得到相同的结果。