18

これは簡単な質問だと思いますが、私は Cpp が初めてで、行き詰まっています。

Rcpp を使用して、R で関数を作成しました。

// [[Rcpp::export]]

Rで関数を呼び出すことができ、意図したとおりに機能します。と呼びましょうF1

次に、最初の関数を呼び出す別の関数 を作成しF2ますRcpp。私は標準の関数呼び出し言語 (つまり、を使用しますF1(arguments))。.sourceCpp()

F2しかし、Rを呼び出そうとすると、次のようになります。

.Primitive(".Call")( のエラー

F2がありません

最初の.cppファイルには

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double F1(NumericVector a) {
  int n = a.size();
  double result=0;  // create output vector
  double ss = 0;

  for(int i = 0; i < n; ++i) {
    ss += pow(a[i],2);
  }

  result = ss;
  return result;
}

以下は、別の .cpp ファイルにあります。

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double F2(NumericVector a) {
  double result=0;

  result = F1(a);

  return result;
}
4

2 に答える 2

4

ポイントのカップル:

  • Rcpp 属性は、C++ 関数を R にエクスポートする唯一の方法ではありません。

  • Rcpp Attributes は関数の名前を変更し、verbose=TRUE引数を使用して結果を確認します。これらの関数名はランダム化されていますが...

  • Rcpp 属性には、C++ へのエクスポート機能がありますRcpp::interfaces()。ビネットを参照してください。

したがって、一方通行と思われる属性に固執したい場合。それ以外の場合は、呼び出したい関数を呼び出しfworker()、それをf1()呼び出して ( f1()R で使用可能になります)、 call をf2()呼び出しますfworker()。しかし、あなたはもっとうまくやれるはずです。

それ以外の場合は、もちろん、明示的に作成された R ラッパーを使用して関数を手動でエクスポートする方法にフォールバックできます。

于 2013-11-02T19:18:33.273 に答える