2011-01-19 11 views
3

すべて、R算術スタンドアロンライブラリを使用したC++の行列/ベクトル?

私はC++でR数学スタンドアロンライブラリを使用しています。私は乱数を生成し、Rから快適な分布関数を使うことができるのが大好きです。私の質問は、Rで利用できる行列演算(乗法、転置、逆関数、Cholなど)を使うことですスタンドアロンのライブラリですか?私はRmath.hでそれらを見ることはできません。

スタンドアロンのC++コードで行列操作を使用できる場合は、R APIが完全なオープンソースの計算エンジンになるようです。このように人々はそれを使用していますか?

ご協力ありがとうございます。

+2

あなたは[RInside](http://dirk.eddelbuettel.com/code/rinside.html)を検討しましたか? –

答えて

3

あなたが言及したことのほとんどではないにしても、RがリンクするLAPACKまたはBLAS Fortranコードによって提供されます.Rはそれ自体のために新しいコードを提供しません。

RでC++を使用する場合は、Dirk EddelbuettelとRomain FrancoisのRcpp packageを参照してください。 DirkはRcppArmadilloパッケージを、Armadillo C++線形代数ライブラリへのインタフェースとして記述しました。これは、あなたが言及した行列演算を行うことができます。

これが使用されるかどうかは、Rの外でアクセスされる別個のC++コードを書くか、R内でアクセスするC++コードをインターフェイスするかによって異なります。Rcppは後者を(非常に)容易にします。 Armadilloを前の状況であれば直接見てください。

+0

私はRcppを見ました。私はかなり感動しています。私が今考えているのは、スタンドアロンのC++コードでR APIを使用することだけです。後で私がRとC++のインターフェースに移ることにしたら、私は間違いなくRcppを見ていきます。 – TJB

+1

@TJB、その場合、Rは標準(コンピュータ統計の世界では)を再利用しているので、あなたは運が悪いと思うFortranライブラリは線形代数です。 Armadillo C++ライブラリをお試しください。 –

3

元の質問は間違ったところで始まると思います。 RにはC++はなく、R自体にはC++ APIはありません。

R行列関数にアクセスするには、C層であり、ではなく、 C++のR APIを経由する必要があります。

彼の答え(およびコメント)とJoshのGavinはスポット・オンです。おそらく、高水準行列代数のためのArmadilloのようなものが欲しいでしょう。 Armadillo(関連ライブラリと同じように)は最終的にBLASとLAPACKに行きます--- Rと同様です。[Doug Batesは通常、ピボット分割に関連する重要な違いが1つあることを私に思い出させます。これは、fastLm()実装とRcppArmadilloの例で触れられています。最後に、Rcppは両方のケースを支援することができます

あなたはRcppが前後にオブジェクトを渡すことが容易になり、あなたが書いたC++コードを呼び出すことによりRを拡張するかどうか
  • 、または

  • あなたはRcppが再び糊

rcpp-develメーリングリストを提供してRInsideを使用して、C++アプリケーション内Rを埋め込みたいかどうか

  • は中-dの多くのための良い場所です深い議論と例。

  • 関連する問題