これを行う方法が見つかりませんでした。R に 3D 配列があり、それを C++ で使用したいと考えています。誰か助けてくれませんか?どうもありがとう。
1 に答える
Rオブジェクトを C++.Call()
に渡すためのインターフェイスは既に見つかりました。次に、(少なくとも) 2 つの選択肢があります。
R に付属の「Writing R Extensions」マニュアルで説明されているように、R API を介して C とマクロを使用します。これは機能し、多くの人が使用しており、時の試練に合格しています。また、少なくとも私の好みでは、少し面倒です。
Rcppパッケージと、R API の上に提供される APIを介して C++ を使用します。多次元配列の例はあまりありませんが、実行できます。内部的には、これらはもちろん次元属性を持つ連続したベクトルです。
Rcppを使用して、2 次元行列から 3 次元への一般化である適切な「キューブ」型を持つ RcppArmadillo に移動することもできます。Armadillo のドキュメントを参照してください。
編集: これは最小限の例です:
R> library(inline)
R> f <- cxxfunction(signature(ms="numeric"), plugin="Rcpp", body='
+ Rcpp::NumericVector m(ms);
+ return m.attr("dim");
+ ')
R> A <- array(1:8, c(2,2,2)) # 3-d array
R> f(A) # call C++ function defined above to get dim array
[1] 2 2 2
R>
渡された配列の次元ベクトルを返す以外には、あまり何もしません。実際にアクセスするには、次元のストライドを手動で計算する必要があるかもしれません。行列以外のものに対する需要はあまり見られません。前回これが必要だったときは、RcppArmadillo経由でArmadilloarma::cube
から使用しました。