我有一个这样的功能:
callFunc <- function (f) {
f(1)
}
Run Code Online (Sandbox Code Playgroud)
f可能是(例如)f <- function (x) x。为了简化事情,假设我知道 f 应该返回一个数字并接受一个数字。
我想转移callFunc到 C,但仍然有fR 中定义的函数,即
.Call('callFunc', function (x) x)
Run Code Online (Sandbox Code Playgroud)
我正在苦苦思索如何在 C 端评估我的回调。我现在是这样的:
#include <R.h>
#include <Rdefines.h>
SEXP callFunc (SEXP i_func) {
return i_func(1);
}
Run Code Online (Sandbox Code Playgroud)
(然后测试它:
R CMD SHLIB test.c
# then in R
dyn.load('test.so'); .Call('callFunc', function (x) x)
Run Code Online (Sandbox Code Playgroud)
)
当然,以上不起作用,因为
i_func进入适当的关闭形式;我不知道如何做到这一点( 中有AS_foo宏Rdefines.h,但没有AS_CLOSURE)。i_func应该接受一个数字并返回一个数字,那么它怎么能评估呢?谁能告诉我如何去做这件事?我正在努力编写 R 扩展,但这很长,我还没有找到我想要的东西。 …
r ×1