我正在尝试使用rcoin
以相等概率返回 0 或 1 的函数生成 0 到 99 范围内的随机数。我编写了以下代码,将连续调用rcoin
函数生成的二进制数转换,然后在数字小于 100 的条件下返回它。这是 R 代码。
rcoin <- function() {
rbinom(n = 1, size = 1, prob = 0.5)
}
r100 <- function(n=100) {
v = n + 1
while(v > n) {
v = sum(sapply(0:6, function(i) rcoin() * 2 ^ i))
}
v
}
val_plot <- function() {
N = 10000
rand_sample <- rep(0, N)
for (i in 1:N){
rand_sample[i] = r100()
}
hist(rand_sample, breaks = 100)
}
val_plot()
它应该产生从 0 到 99 的均匀随机数,因为截断的均匀分布也是均匀的。但是当我绘制 10000 个生成值的直方图时,我看到值 0 生成的次数异常多,但所有其他值都遵循均匀分布。为什么?我猜这是因为二进制数“1111111”被拒绝,而“0000000”没有。但是我该如何解决这个问题呢?有什么办法可以改善吗?