R 如何在多个范围内生成随机数
我想知道如何在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
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