我一直在编写一些代码来迭代执行二项式绘制(使用rbinom),对于某些被调用者参数,我最终可能会因其尺寸过大而导致R(3.1.1,已通过官方或自制软件测试),因此不太可能相关的编译器)以返回意外的NA。例如:

rbinom(1,2^32,0.95)

是我期望的工作方式,但是还给了NA。但是,可以使用size=2^31prob≤0.5运行。

好的手册提到了当size < .Machine$integer.max为false时使用的反转,这可能是问题吗?

最佳答案

查看the source rbinom对于如此大的尺寸执行以下等效操作(在C代码中):

qbinom(runif(n), size, prob, FALSE)

确实:
set.seed(42)
rbinom(1,2^31,0.95)
#[1] 2040095619
set.seed(42)
qbinom(runif(1), 2^31, 0.95, F)
#[1] 2040095619

然而:
set.seed(42)
rbinom(1,2^32,0.95)
#[1] NA
set.seed(42)
qbinom(runif(1), 2^32, 0.95, F)
#[1] 4080199349

@BenBolker指出rbinom返回一个整数,并且如果返回值大于.Machine$integer.max,例如,大于我的机器上的2147483647,则返回NA。相反,qbinom返回一个 double 值。我不知道为什么,而且似乎也没有记录在案。

因此,似乎至少存在未记录的行为,您应该报告该行为。

关于r - `rbinom()`中可能存在大量测试的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26241135/

10-10 18:35