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