我在R中生成一个小的随机统一数集合(在本例中为10,000),并且我以惊人的速度发现重复(例如,在10,000个数字抽奖中每隔几次重复一次).为什么会发生这种情况,我如何才能(有效地)阻止它?
下面是一个最小的工作示例,其中我继续并绘制了100万个Unif(0,1)值.这似乎会产生许多重复的值.我确实在寻找重复项时遇到了一些问题,所以我不得不在下面做了一些难看的事情,有时由于舍入或其他原因,这可能无法找到重复项,但它似乎在我的机器上起作用了.
rs_val <- .Random.seed
tvals <- runif(10^6,0,1)
tr1 <- as.numeric(names(which(table(tvals)>1)))[1]
tr_idx <- which(abs(tvals-tr1)<0.000000001)
tr_idx[1]
tr_idx[2]
format(tvals[tr_idx[1]],digits=22)
format(tvals[tr_idx[2]],digits=22)
tvals[tvals==as.numeric(format(tvals[tr_idx[1]],digits=22))]
对于一个现代的伪随机数生成器来说,大概100万次抽奖根本不应该是那么多,对吗?我在这里看到了一些关于C++的类似问题的帖子,但没有关于R的帖子.在R中,这与随机抽签发生得比随机种子重置更快或类似的事情有关.
有没有人可以对上面的代码进行有效的修改,以防止重复的随机数问题?基本上,我只是在长时间线上模拟泊松过程,这会导致同时发生事件,这是有问题的.我想,我可以只看一遍模拟,然后放弃重复的抽签,但如果不需要这样做就好了.