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

Where is the code for recycling `rbinom` inputs?

根据文档,rbinom 采用三个参数,nsizeprob 的答案是说如果 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 在哪里? probn的长度在哪里回收?我在这个函数定义中找不到它。

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

正在搜索 all C files containing rbinom, the only other relevant-seeming C file I found is this one,但我不明白。这是回收发生的地方,还是我遗漏了另一个函数定义?

在 stack overflow 的帮助指导下,我成功地回答了这个问题。我不确定细节,但这里是:

> 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 被调用,同时回收了 size 和 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); \
    }