对于大量试验,`rbinom()`可能存在错误

Sam*_*son 5 random r

我一直在编写一些代码,迭代地执行二项式绘制(使用rbinom),对于一些被调用者参数,我最终可能会大小很大,这导致R(3.1.1,官方或自制程序构建测试 - 所以不太可能是编译器相关)返回意外NA.例如:

rbinom(1,2^32,0.95)
Run Code Online (Sandbox Code Playgroud)

是我期望的工作,但NA回馈.但是,运行size=2^31prob?0.5工作.

精细的手册提到在size < .Machine$integer.max错误时使用倒置,这可能是问题吗?

Rol*_*and 4

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

qbinom(runif(n), size, prob, FALSE)
Run Code Online (Sandbox Code Playgroud)

确实:

set.seed(42)
rbinom(1,2^31,0.95)
#[1] 2040095619
set.seed(42)
qbinom(runif(1), 2^31, 0.95, F)
#[1] 2040095619
Run Code Online (Sandbox Code Playgroud)

然而:

set.seed(42)
rbinom(1,2^32,0.95)
#[1] NA
set.seed(42)
qbinom(runif(1), 2^32, 0.95, F)
#[1] 4080199349
Run Code Online (Sandbox Code Playgroud)

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

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