如何从R中定义的范围生成随机数

时间:2016-10-31 20:25:52

标签: r random

我想在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?

中生成这些范围内的随机数

1 个答案:

答案 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)