在R中生成3到7位数字的随机数
Generate random numbers with 3 to 7 digits in R
如何生成不同长度的随机数,比如 3 到 7 位数字之间的概率相等。
最后我希望代码给出一个 3 到 7 位数字(概率相等),由 0 到 9 之间的随机数组成。
我想到了这个解决方案,但由于必须生成数据框,所以觉得它过于复杂。
options(scipen=999)
t <- as.data.frame(c(1000,10000,100000,1000000,10000000))
round(runif(1, 0,1) * sample_n(t,1, replace = TRUE),0)
有没有更优雅的方案?
根据您提供的信息,我想出了另一个可能更接近您想要的解决方案。最后,它包括以下步骤:
- 从[3, 7]中随机取一个数
len
确定输出的长度
- 从 [0, 9]
中随机选择 len
个数字
- 连接这些数字
执行此操作的代码:
(len <- runif(1, 3, 7) %/% 1)
(s <- runif(len, 0, 9) %/% 1)
cat(s, sep = "")
我之前提供过这个答案;它不符合要求,但在 OP 提供了更多详细信息后变得很清楚。
这不归结为生成 100 到 9999999 之间的随机数吗?
如果是这样,这是否符合您的要求?
runif(5, 100, 9999999) %/% 1
你也可以使用舍入,但你总是必须向下取整。
输出:
[1] 4531543 9411580 2195906 3510185 1129009
您可以使用矢量化方法,并直接在指数中从允许的指数范围内采样:
pick.nums <- function(n){floor(10^(sample(3:7,n,replace = TRUE))*runif(n))}
例如,
> set.seed(123)
> pick.nums(5)
[1] 455 528105 89241 5514350 4566147
如何生成不同长度的随机数,比如 3 到 7 位数字之间的概率相等。
最后我希望代码给出一个 3 到 7 位数字(概率相等),由 0 到 9 之间的随机数组成。
我想到了这个解决方案,但由于必须生成数据框,所以觉得它过于复杂。
options(scipen=999)
t <- as.data.frame(c(1000,10000,100000,1000000,10000000))
round(runif(1, 0,1) * sample_n(t,1, replace = TRUE),0)
有没有更优雅的方案?
根据您提供的信息,我想出了另一个可能更接近您想要的解决方案。最后,它包括以下步骤:
- 从[3, 7]中随机取一个数
len
确定输出的长度 - 从 [0, 9] 中随机选择
- 连接这些数字
len
个数字
执行此操作的代码:
(len <- runif(1, 3, 7) %/% 1)
(s <- runif(len, 0, 9) %/% 1)
cat(s, sep = "")
我之前提供过这个答案;它不符合要求,但在 OP 提供了更多详细信息后变得很清楚。
这不归结为生成 100 到 9999999 之间的随机数吗? 如果是这样,这是否符合您的要求?
runif(5, 100, 9999999) %/% 1
你也可以使用舍入,但你总是必须向下取整。
输出:
[1] 4531543 9411580 2195906 3510185 1129009
您可以使用矢量化方法,并直接在指数中从允许的指数范围内采样:
pick.nums <- function(n){floor(10^(sample(3:7,n,replace = TRUE))*runif(n))}
例如,
> set.seed(123)
> pick.nums(5)
[1] 455 528105 89241 5514350 4566147