0
我使用sample
函数来执行一些随机采样操作。通常,随机数生成器基于种子值。我如何确保每个R会话或每个样本调用将使用不同的种子值?关于随机数发生器中的种子规范
我使用sample
函数来执行一些随机采样操作。通常,随机数生成器基于种子值。我如何确保每个R会话或每个样本调用将使用不同的种子值?关于随机数发生器中的种子规范
无论何时首先需要用于RNG的种子,R会从当前时间和正在运行的R会话的进程ID中生成一个。设置种子的唯一(简单)方法是通过set.seed()
,所以假设你不保存和恢复会话之间的种子(这是可能的,甚至是可重复研究的特征,如果你想存储种子)和不要将set.seed()
与相同的种子联系起来,您应为每个会话获得不同的种子。
要获得用于sample
的每次调用的不同种子,您必须在每次调用sample
之前模拟R的某种程度并将种子设置为某个新值。这可能是最好的包装功能,它将种子设置为新值和然后调用sample
。
例如:
Sample <- function(seed, ..., verbose = FALSE) {
if(missing(seed))
seed <- floor(as.numeric(Sys.time()) + Sys.getpid())
if(verbose)
writeLines(paste("Using seed:", seed))
set.seed(seed)
sample(...)
}
> Sample(x = 10)
[1] 7 3 8 9 10 2 4 5 6 1
> Sample(x = 10, verbose = TRUE)
Using seed: 1365040429
[1] 9 5 7 10 6 8 1 4 3 2
> Sample(x = 10, verbose = TRUE)
Using seed: 1365040431
[1] 6 9 3 5 2 1 10 8 7 4
> Sample(x = 10, verbose = TRUE)
Using seed: 1365040432
[1] 9 6 8 1 2 10 3 4 7 5
这不是完美的 - 如果你打电话Sample
太快(超过每秒一次)相同的种子会习惯对于那些第二期间调用运行。
更多细节在?Random
,你应该阅读。
'?Random'中的Note部分回答你的问题吗? – joran 2013-04-03 22:11:19
为什么你想每次调用'样本'重复运行'样本'而不需要改变种子会产生不同的伪随机样本 - 你不需要每次都明确设置种子来实现这个壮举。 – 2013-04-03 22:21:33
对于每个R会话都有不同的种子,但不是每个样本调用都很好。 – Nishanth 2013-04-04 03:59:11