1

私はRパッケージ「RcppArmadillo」を使用しています。私はすでに2つのcxxfunctionを定義するためにそれを使用しました(それらはデバッグされており、使用しても問題ありません):

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()パッケージインラインからの使用から、Rcpp属性とそのの使用に切り替えることができますsourceCpp()。このようにして、C++レベルで予測可能な関数ヘッダーを取得します。Rcpp属性ビネットを参照してください。

または、 「worker」と「wrapper」に分割calc1して、ラッパーを囲み、ワーカーを呼び出すことができるようにします。calc2cxxfunction()

ここでの重要な問題は、 R呼び出し可能cxxfunction()関数を作成するために存在し、内部のランダム化された関数ヘッダーを生成することです。

最後に、パッケージも役立ちます。

于 2013-01-08T18:57:56.187 に答える