我正在从命令行运行脚本
R CMD BATCH script.in.R script.out.R &
我有以下行,它选择12个随机行ID并对它们进行排序:
test.index<-sort(sample(1:nrow(recoded),12))
如果我不更改脚本,它每次都会吐出相同的12个数字。如果我稍微更改它(更改标签或字符串或任何东西),那么数字就不同了......我每次都需要它们不同!
有什么想法吗?
答案 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 数字是相同的。
此外,Rscript
比R CMD BATCH
更好。
答案 2 :(得分:0)
检查您是否未加载任何先前的工作区。如果有,也会加载前一个种子,从而得到相同的结果。