我想在R中生成随机数。说我有一些范围:
20 3293601
3295601 3653454
3655454 3877785
3879785 4454406
4456406 4772139
4774139 4948406
4950406 5188645
5190645 5641009
5643009 5731188
5733188 5993268...
当然,我可以先用seq(start, end)
生成这个范围的序列,然后将所有这些序列附加在一起。然后我可以使用sample(sequences, n)
生成随机数。但问题是我有很多这样的范围,比如我有千个范围,所以生成所有这些序列并不是很可行。是否有更快的方法在R?
答案 0 :(得分:2)
假设您想要在您发布的每行数据的间隔之间生成随机数,其中第一列表示下限,第二列表示上限,这样的事情就可以了。
ranges <- matrix(c(20,3293601,
3295601,3653454,
3655454,3877785,
3879785,4454406,
4456406,4772139,
4774139,4948406,
4950406,5188645,
5190645,5641009,
5643009,5731188),
ncol = 2,
byrow = TRUE)
mapply(runif, 100, ranges[ ,1], ranges[ ,2])
这将在每个范围之间生成100个绘图。您可以将100更改为您想要的多少绘图。
根据你的评论,我仍然很困惑,但我会尝试。从您的示例来看,听起来您似乎想要sample(c(1:10, 20:30), 10)
的结果,现在您想知道如果您有更多的间隔时如何做到这一点。那是对的吗?看看下面是否是你想要的。
seqs <- unlist(mapply(seq, ranges[ ,1], ranges[ ,2]))
sample(seqs, 10)