评估R中的C代码

时间:2014-05-23 06:03:53

标签: r

我想查看R中族的背后代码,例如:

make.link("logit")
make.link("identity")
make.link("probit")

现在在R - repsones中看到有一些函数被调用,用编程语言C编写:

示例:

.Call(C_logit_link, mu)
.Call(C_logit_linkinv, eta)
.Call(C_logit_mu_eta, eta)

现在想要访问此特定代码。我有什么方法可以做到吗?

2 个答案:

答案 0 :(得分:2)

调用.Call的函数在编译代码中调用入口点,因此如果要完全理解函数,则必须查看已编译代码的来源

例如,您要找的是here

SEXP logit_link(SEXP mu)
{
    int i, n = LENGTH(mu);
    SEXP ans = PROTECT(duplicate(mu));
    double *rans = REAL(ans), *rmu=REAL(mu);

    if (!n || !isReal(mu))
    error(_("Argument %s must be a nonempty numeric vector"), "mu");
    for (i = 0; i < n; i++)
    rans[i] = log(x_d_omx(rmu[i]));
    UNPROTECT(1);
    return ans;
}

我建议你阅读关于如何获取任何R函数源代码的优秀答案here

答案 1 :(得分:0)

主代码库存储在SVN存储库中。有关该信息,请参见R project developer page

github上有可用的代码库镜像,以便于搜索。例如https://github.com/wch/r-source/。您会看到这些功能存在于

/src/library/stats/src/family.c

代码中的函数名称不具有C_前缀。