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

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

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

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

函数do_sys来自main/context.c这些诱人的代码:

 RCNTXT *cptr; cptr = R_GlobalContext; t = cptr->sysparent; 

但是RCNTXTincludes/Defn.h定义,而Defn.h看起来是一个内部的非导出头。