根据?runif
,此函数不会生成最小或最大边界。我怎样才能做runif
之类的事情,但包括最小和最大?
这仅适用于纯理论。我想知道 - 如果我真的需要从均匀分布中随机生成一些值,包括下限。
答案 0 :(得分:4)
您可以使用sample
函数编写自己的统一分布函数,包括端点:
myrunif <- function(n, min=0, max=1) {
min + (sample(.Machine$integer.max, n) - 1) / (.Machine$integer.max - 1) *
(max - min)
}
使用此功能,每个端点返回的概率很小1/(.Machine$integer.max-1)
。
然而,值得记住,从数学上来说,从U(a,b)随机变量中绘制a或b(或任何特定值)的概率为0,因此runif
的当前行为会产生很大影响感觉。
答案 1 :(得分:1)
在纯理论中,从连续分布生成任何单个值的概率为0,因此min或max的概率为0。
从实际的角度来看,如果你真的想要生成一个统一的(它将四舍五入到一组有限的值并因此具有大于0的概率),并且有可能看到所需的最小值和最大值,那么在min-epsilon和max + epsilon之间产生一个均匀的。现在min和max都在范围内,并且有可能像其他值一样被选中。你只需要选择一个epsilon值,使得min-epsilon和min之间的值将舍入到min并且类似于max。