我想为以下 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 - 该工具非常丰富和有用。