相关疑难解决方法(0)

从 C 包装器调用 R 函数

我有一个这样的功能:

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_fooRdefines.h,但没有AS_CLOSURE)。
  • 我什至没有告诉 C 代码i_func应该接受一个数字并返回一个数字,那么它怎么能评估呢?

谁能告诉我如何去做这件事?我正在努力编写 R 扩展,但这很长,我还没有找到我想要的东西。 …

r

5
推荐指数
1
解决办法
249
查看次数

标签 统计

r ×1