我一直在编写一些代码来迭代执行二项式绘制(使用rbinom
),对于某些被调用者参数,我最终可能会因其尺寸过大而导致R(3.1.1,已通过官方或自制软件测试),因此不太可能相关的编译器)以返回意外的NA
。例如:
rbinom(1,2^32,0.95)
是我期望的工作方式,但是还给了
NA
。但是,可以使用size=2^31
或prob≤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/