我一直在编写一些代码,迭代地执行二项式绘制(使用rbinom),对于一些被调用者参数,我最终可能会大小很大,这导致R(3.1.1,官方或自制程序构建测试 - 所以不太可能是编译器相关)返回意外NA.例如:
rbinom(1,2^32,0.95)
Run Code Online (Sandbox Code Playgroud)
是我期望的工作,但NA回馈.但是,运行size=2^31或prob?0.5工作.
精细的手册提到在size < .Machine$integer.max错误时使用倒置,这可能是问题吗?
对于如此大的尺寸,查看源代码 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返回一个双精度值。我不知道为什么,而且似乎没有记录。
因此,似乎至少存在未记录的行为,您应该报告它。