使用`.Call`的R上下文,环境和调用堆栈
是否有可以从.Call
调用的C代码直接调用的parent.frame
或sys.calls
或其他常规上下文函数的.Call
? 环顾Rinternals.h
等,我似乎找不到任何类似的东西。 我能想到的最好的是:
my_fun <- function(x) { .Call(my_fun_C, substitute(x), parent.frame(), sys.calls()) }
但理想情况下,我宁愿避免R调用substitute
, parent.frame
等,并直接从C做。为什么? 这些函数调用中的每一个都会增加300ns来评估my_fun
,虽然这并不能完全杀死我,但我想知道是否有办法避免它,或者我是否坚持使用上述函数。
函数do_sys
来自main/context.c
这些诱人的代码:
RCNTXT *cptr; cptr = R_GlobalContext; t = cptr->sysparent;
但是RCNTXT
在includes/Defn.h
定义,而Defn.h
看起来是一个内部的非导出头。