回收“ rbinom”输入的代码在哪里?

时间:2019-04-01 19:29:35

标签: c r cran

在文档中,rbinom接受三个参数,nsizeprob。对this question的回答指出,如果prob是向量,则将其回收直到达到n。我想找到那个代码!

R源立即调用C函数:

> rbinom
function (n, size, prob) 
.Call(C_rbinom, n, size, prob)
<bytecode: 0x113526220>
<environment: namespace:stats>

在Github镜像中搜索R gets me the this rbinom C function,但是它只接受两个参数。 n在哪里?将prob回收到n的长度在哪里?我在此函数定义中找不到它。

double rbinom(double nin, double pp)
{
...
}

正在搜索all C files containing rbinom,这是我发现的is this one唯一的其他相关的C文件,但我不理解。是在发生回收的地方,还是在我遗漏的地方有另一个函数定义?

1 个答案:

答案 0 :(得分:0)

在堆栈溢出的有用指导下,我设法满意地回答了这个问题。我不确定细节,但是可以这样:

> rbinom

呼叫此行

rbinom <- function(n, size, prob) .Call(C_rbinom, n, size, prob)

位于第149行 /src/library/stats/R/distn.R

这将呼叫

static R_INLINE SEXP random2(SEXP sn, SEXP sa, SEXP sb, ran2 fn, SEXPTYPE type)

带有sn=nsa=sizesb=probfn=rbinom

在该函数中,您想要的代码位于ine 185:rx = fn(ra[i % na], rb[i % nb]);上,它表明rbinom被称为回收大小和prob参数。

random2和rbinom之间的连接是通过预处理器在与random2函数相同的文件中建立的。

DEFRAND2_INT(rbinom)
#define DEFRAND2_INT(name) \
    SEXP do_##name(SEXP sn, SEXP sa, SEXP sb) { \
        return random2(sn, sa, sb, name, INTSXP); \
    }