我正在阅读R资料,并试图了解堆结构。我正在寻找PROTECT()的定义,但是我已经建立了:

$ grep -rn "#define PROTECT(" *
src/include/Rinternals.h:642:#define PROTECT(s) Rf_protect(s)

然后
$ grep -rn "Rf_protect(" *
src/include/Rinternals.h:803:SEXP Rf_protect(SEXP);
src/include/Rinternals.h:1267:SEXP Rf_protect(SEXP);

但是我没有找到Rf_protect()的定义。

谢谢。

最佳答案

Rf_前缀是一个常见的习惯用法,它使此普通C代码类似于 namespace 。因此,您想查找protect(...)而不是:

/usr/share/R/include/Rinternals.h:#define protect               Rf_protect

考虑到这一点的“核心”程度,您也可以从src/main开始,其中快速的grep -c将您带到src/main/memory.c。 Et voila on lines 3075 to 3081
SEXP protect(SEXP s)
{
    if (R_PPStackTop >= R_PPStackSize)
    R_signal_protect_error();
    R_PPStack[R_PPStackTop++] = CHK(s);
    return s;
}

如此说来,您可能要关注大多数文件,而不仅仅是此功能。

关于r - 我在哪里可以找到R来源中Rf_protect()的定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31569730/

10-12 19:47