R 如何在多个范围内生成随机数

R 如何在多个范围内生成随机数,r,random,R,Random,我想知道如何在R中以以下方式生成随机数: randomly choose 1 number between 1 and 15 randomly choose 1 number between 16 and 30 ... randomly choose 1 number between 86 and 100 我知道我可以用一个循环来实现这一点,但我想知道是否有任何非循环的方法来实现这一点。我试着在谷歌上搜索,但没有找到太多帮助。我们可以用sapply和sample按以下方式编写函数 s

我想知道如何在R中以以下方式生成随机数:

 randomly choose 1 number between 1 and 15
 randomly choose 1 number between 16 and 30
 ... 
 randomly choose 1 number between 86 and 100

我知道我可以用一个循环来实现这一点,但我想知道是否有任何非循环的方法来实现这一点。我试着在谷歌上搜索,但没有找到太多帮助。

我们可以用
sapply
sample
按以下方式编写函数

select_1_number_in_range <- function(start, stop, interval) {
  sapply(seq(start, stop, interval), function(x) sample(x:(x+interval-1), 1))
}

set.seed(31)
select_1_number_in_range(1, 100, 15)


#[1]   9  31  37  52  76  83 104

select\u 1\u number\u in_range首先,100不能被15整除,所以这个答案将上升到105

首先创建一个带有
105/15
行的整数矩阵
1:105
。然后,我们只需为每行采样一列。通过这种方式,我们可以从每个范围中获得一个随机值,而无需使用循环

## set up
n <- 105
m <- matrix(1:n, nrow=n/15, byrow=TRUE)
## execute
m[cbind(1:nrow(m), sample(ncol(m), nrow(m)))]
# [1]   5  23  33  51  74  77 103
使用
runif()
。它的工作方式是
runif(n,min=x,max=y)

n
是您想要的随机生成的数字的数目
min
max
是可以绘制数字的范围

就你而言:

> runif(1, min=1, max=15)
[1] 2.916329
> runif(1, min=16, max=30)
[1] 28.54506
> runif(1, min=86, max=100)
[1] 87.43045
请注意,上面生成的数字有十进制数字。如果需要整数,请在round()中插入上面的内容,即


当然有。请提供一些形式的帮助,我们可能会提供帮助。我不认为这是正确的。。。i、 e.当x=1时,从1到16取样。“我想这很容易修复。”Headpoint更正。你是对的。我认为
interval-1
在这里是正确的。谢谢:)
> runif(1, min=1, max=15)
[1] 2.916329
> runif(1, min=16, max=30)
[1] 28.54506
> runif(1, min=86, max=100)
[1] 87.43045
> round(runif(1, min=1, max=15), digits=0)
[1] 7
> round(runif(1, min=16, max=30), digits=0)
[1] 23
> round(runif(1, min=86, max=100), digits=0)
[1] 90