使用`.Call`的R上下文,环境和调用堆栈

时间:2014-09-19 14:39:38

标签: c r

是否有parent.framesys.calls或其他常规上下文函数的版本可以直接从.Call调用的C代码调用?环顾Rinternals.h等,我似乎找不到任何类似的东西。我能想出的最好的东西是:

my_fun <- function(x) {
   .Call(my_fun_C, substitute(x), parent.frame(), sys.calls())
}

但理想情况下,我更愿意避免对substituteparent.frame等进行R调用,并直接从C进行调用。为什么?这些函数调用中的每一个都增加了300ns来评估my_fun,虽然这并不能完全杀死我,但我想知道是否有办法避免它或者我是否#39; m坚持以上。

函数main/context.c中的do_sys代码有一些诱人的细节:

RCNTXT *cptr;

cptr = R_GlobalContext;
t = cptr->sysparent;

RCNTXT中定义includes/Defn.hDefn.h看起来是内部非导出标头。

0 个答案:

没有答案