1

我一直在使用 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);
    ...
'

我的问题可能看起来很幼稚,但它仍然困扰着我。谁能帮忙解释一下?我会很感激的!

4

1 回答 1

1

您可以从使用cxxfunction()from package inline切换到使用 Rcpp 属性及其sourceCpp(). 这样您就可以在 C++ 级别获得可预测的函数头,请参阅 Rcpp 属性小插图。

或者拆分成'worker'和'wrapper',calc1在包装器周围有一个允许你调用worker的地方。calc2cxxfunction()

这里的关键问题实际上是cxxfunction()创建R 可调用函数的存在,它生成内部随机函数头。

最后,一个包也会有所帮助。

于 2013-01-08T18:57:56.187 回答