1

これを行う方法が見つかりませんでした。R に 3D 配列があり、それを C++ で使用したいと考えています。誰か助けてくれませんか?どうもありがとう。

4

1 に答える 1

4

Rオブジェクトを C++.Call()に渡すためのインターフェイスは既に見つかりました。次に、(少なくとも) 2 つの選択肢があります。

  1. R に付属の「Writing R Extensions」マニュアルで説明されているように、R API を介して C とマクロを使用します。これは機能し、多くの人が使用しており、時の試練に合格しています。また、少なくとも私の好みでは、少し面倒です。

  2. Rcppパッケージと、R API の上に提供される APIを介して C++ を使用します。多次元配列の例はあまりありませんが、実行できます。内部的には、これらはもちろん次元属性を持つ連続したベクトルです。

  3. 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から使用しました。

于 2012-05-30T13:22:14.700 に答える