我有一些 R 代码,有点慢,所以我一直在尝试使用“内联”库直接在 R 代码中编写一些 C++ 代码。
这很好用,我现在正在尝试调整它。
只有在 R 中分配“结果”数据结构并将它们作为函数参数传递给 c 函数时,我才能使其工作。我想知道是否有可能在 R 代码中有一个非 void c/c++ 函数,这样内存是从 c/c++ 而不是 R 分配和返回的。
请参见下面的示例:
library(inline)
cppSig <- signature(res="numeric",ary="numeric",len="integer")
cppBody <- "
int lens=len[0];
res[0]=0;
for(int j=0;j<lens;j++)
res[0] += ary[j];
res[0] /= (double) lens;
#if 0 //Is something like this possible?
double *rary = new double[lens];
for(int i=0;i<lens;i++) rary[i] = ary[i]-res[0];
return rary;
#endif
"
cfun <- cfunction( sig=list(myMean=cppSig),
body=list(cppBody),verbose=T,
convention=".C", cxxargs="-O3", cppargs="-O3",language="C++")
cfunWrap <- function(x)
cfun$myMean(res=0,ary=x,length(x))$res
cfunWrap(x=rnorm(100))
谢谢