4

多くのデータに依存する尤度関数の値を計算する C++ で書かれたプログラムがあります。R から関数を呼び出して関数値を要求できるようにしたいと考えています (R では計算に時間がかかり、C++ プログラムは既にそれを変更するには長すぎます。約 150K 行のコードです)。

これを実行して 1 つの値を要求することはできますが、その後 C++ アプリケーションが終了し、再起動してすべてのデータを再度ロードする必要があります (これは で行いました.c())。尤度関数とデータのモデルにもよりますが、読み込みには 10 ~ 30 秒かかります。C++ アプリケーションを存続させ、関数値の要求を待機する方法があるかどうかを考えていたので、すべてのデータをメモリに読み込みます。C++ アプリケーションで既に 1 つの関数値を計算するのに約 0.5 秒かかりますが、これは C++ では非常に長い時間です。

を使用してこれを行うことを考えてpipe()いましたが、それが実行可能なオプションであるかどうか、または他の方法を使用する必要があるかどうかを尋ねますか? rcppでこれを行うことは可能ですか?

この関数で R の最小化アルゴリズムをテストするためにこれを行っています。

4

2 に答える 2

1

ここでいくつかの質問があります。

RからC++コードを呼び出す最良の方法は何ですか?

他のコメンターが指摘したように、このRcppパッケージは最も優れたインターフェイスを提供します。ベースRの関数を使用する.Callことも可能ですが、そうではありませんおすすめされたRcppと同じくらい素晴らしい。

R と C++ の間で繰り返しデータをやり取りするのをやめるにはどうすればよいですか?

コードを少し再構築するだけです。既存のすべての C++ ルーチンを呼び出すラッパー ルーチンを C++ で書き直して、それを R から呼び出します。

于 2013-10-10T12:02:55.267 に答える