Генерация случайных чисел с 3 до 7 цифр в R - PullRequest
0 голосов
/ 23 октября 2018

Как я могу генерировать случайные числа различной длины, скажем, от 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)

Есть ли более элегантное решение?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы можете использовать векторизованный подход и выборку из допустимого диапазона показателей непосредственно в показателе степени:

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
0 голосов
/ 23 октября 2018

Исходя из предоставленной вами информации, я нашел другое решение, которое может быть ближе к тому, что вы хотите.В конце концов, он состоит из следующих шагов:

  • случайным образом выбирает число len из [3, 7], определяющее длину вывода
  • случайным образом выбирает len числаиз [0, 9]
  • объединить эти числа

Код, чтобы сделать это:

(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
...