gpt4 book ai didi

r - 为什么 runif() 不能预测区间最大值?

转载 作者:行者123 更新时间:2023-12-04 01:48:32 25 4
gpt4 key购买 nike

我是 respondingReddit AskScience 提出问题我在 runif() 的功能方面遇到了一些奇怪的事情.我试图从 1 到 52 统一采样一组。我的第一个想法是使用 runif():

as.integer(runif(n, min = 1, max = 52))

但是,我发现该操作从未产生过 52 的值。例如:
length(unique(as.integer(runif(1000000, 1, 52))))
[1] 51

出于我的目的,我只是求助于 sample()反而:
sample(52, n, replace = TRUE)

在 runif() 文档中,它指出:

runif will not generate either of the extreme values unless max = min or max-min is small compared to min, and in particular not for the default arguments.



我想知道为什么 runif()以这种方式行事。如果它试图统一生成样本,它似乎应该能够从集合中生成“极端值”。这是一个功能吗,为什么?

最佳答案

这确实是一个特点。 C source coderunif包含以下 C 代码:

/* This is true of all builtin generators, but protect against
user-supplied ones */
do {u = unif_rand();} while (u <= 0 || u >= 1);
return a + (b - a) * u;

这意味着 unif_rand()可以返回 0 或 1,但 runif()旨在跳过那些(不太可能)的情况。

我的猜测是这样做是为了保护在边缘情况下会失败的用户代码(值恰好在范围的边界上)。

此功能是 implemented by Brian Ripley on Sep 19 2006 (从评论看来, 0<u<1 对于内置的统一生成器来说是自动正确的,但对于用户提供的生成器可能不是这样)。
sample(1:52,size=n,replace=TRUE)是实现目标的惯用方式(尽管不一定是最有效的)。

关于r - 为什么 runif() 不能预测区间最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46065633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com