在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