3

私はRC++を統合するために、RcppとRInsideを使用しています。複雑でありながら適切に設計されたC++アーキテクチャがあり、1つの関数内からRにアクセスするのは難しいと感じています。R より多くのOOP設計を得るために、インスタンスを異なるクラス/関数に渡すことは可能ですか?はいの場合、例はありますか?

クエリを詳しく説明するために、私はこのようなことを言いたいと思います、

void foo(RInside& R0, int& x0)
{
 R0.assign(x0,"totalSum");
}
void foo2(RInside& R0, int& y0)
{
  R0.assign(y0,"temp");
   R0.parseEvalQ("totalSum = totalSum + temp"); 
 }
int main(int argc, char *argv[])
{   
  RInside R(int argc, char *argv[]);
  int x=10, y = 11;
  foo(R,x);
  foo2(R,y);
  return 0;
}

私が現在気付いているのは、fooを呼び出すたびに、おそらくRInsideの新しいインスタンスが作成されるということです。

ありがとう-エゴン

4

1 に答える 1

5

はい。先にrcpp-develリスト(RcppとRInsideが気になる場合は、これに従う必要があります)に書いたように、 Qt内に埋め込む例をRInsideに追加しました。

Rをインスタンス化しmain()てから、このオブジェクトへの参照をそれを使用するクラスに渡します。1つのRインスタンスのみが実行されていることを確認する必要があるため(Rがマルチスレッド化されていないなど---さらにインスタンスが必要な場合は、Rserveを検討してください)、これは適切なモデルのようです。

この例は現在SVNにあり、私のボックスでは次のようになっています。

ここに画像の説明を入力してください

混合物で遊んだり、両方のドローの中央の場所を広げたり、推定密度の2つのこぶを区別しなくなった帯域幅を確認したりできるので、とても気に入っています。

于 2011-03-18T21:29:08.060 に答える