如何为返回 int* 的 C 函数生成 R 包装器?

  • 本文关键字:包装 函数 返回 int c r swig
  • 更新时间 :
  • 英文 :


我想为以下 C 函数生成一个 R(编程语言(包装器:

int *test(void)
{
int i;
i = 1024;
return (int *) i;
}

为了创建这个包装器,我正在使用带有以下接口的 SWIG:

%module X
%{
extern int *test(void);
%}
extern int *test(void);

我可以成功地创建和编译这个包装器。但是,当我运行以下 R 代码时(包装器是事先加载的(:

print(test())

它将给出以下错误:

Error in getClass(Class, where = topenv(parent.frame())) : 
“_p_int” is not a defined class
Calls: print -> test -> new -> getClass

我的问题如下:如何包装 Ctest函数(更准确地说是该函数返回的int *(?

SWIG在R周围并没有被广泛使用。 但是内联包可以为您提供帮助。

R> library(inline)
R> foo <- cfunction(signature(i="int"), body="*i = 1024;",
+                   language="C", convention=".C")
R> foo(12)$i
[1] 1024
R> 

也就是说,你可能想要.Call()而不是.C(),即使你想使用普通的C,你也应该研究Rcpp - 该工具非常丰富和有用。

最新更新