我一直在使用R包“RcppArmadillo”。我已经用它来定义两个cxx函数(它们已被调试好了):
calc1 <- cxxfunction(signature(A="integer", B="integer"),...)
calc2 <- cxxfunction(signature(A="integer", K="integer"),...)
现在我正在编写另一个cxxfunction main的正文部分,并希望在for循环中调用calc1和calc2,如:
body_main = '
...
for(int i=0; i<N; i++){
// This is where I want to call calc1.
// (?)
for(int j=0; j<N; j++){
// This is where I want to call calc2.
// (?)
}
}
'
无论如何,我能做到吗?这可以以内联方式完成吗?
我还没有看到内联使用RcppArmadillo(或Rcpp,RcppGSL)的例子,其中人们在正文部分编写子程序 - 具体来说,我的意思是代码如下:
body_example = '
// Subroutine
SEXP(/*or something else*/) func_0(SEXP A, SEXP B){
...
return ...;
}
// Then call it from the main part
...
AB = func_0(A, B);
...
'
我的问题可能看起来很幼稚,但它仍然困扰着我。有人可以帮忙解释一下吗?我非常感激!
答案 0 :(得分:1)
您可以使用cxxfunction()
从包inline切换到使用Rcpp属性及其sourceCpp()
。这样您就可以在C ++级别获得可预测的函数头,请参阅Rcpp atributes vignette。
或者将calc1
和calc2
拆分为'worker'和'wrapper',在包装器周围设置cxxfunction()
,允许您呼叫该工作人员。
这里的关键问题是cxxfunction()
存在以创建 R-callable 函数,并生成内部随机函数头。
最后,一个包也会有所帮助。