Как с равной вероятностью сгенерировать случайные числа различной длины, скажем, от 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 ответа
Вы можете использовать векторизованный подход и выбирать из допустимого диапазона показателей прямо в экспоненте:
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
Основываясь на предоставленной вами информации, я придумал другое решение, которое может быть ближе к тому, что вы хотите. В конечном итоге он состоит из следующих шагов:
- случайным образом выберите число
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
Вы, вероятно, также можете использовать round, но вам всегда придется округлять в меньшую сторону.
Выход:
[1] 4531543 9411580 2195906 3510185 1129009
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.