2012-05-30 43 views
1

從R到C++傳遞3D數組我找不到如何執行此操作。我在R中有一個3D數組,我想在C++中使用它。 任何人都可以幫忙嗎? 非常感謝。如何使用.Call

+1

下面是如何在C++中定義2d和3d數組:http://www.cplusplus.com/forum/articles/7459/希望至少讓你開始吧 – Brady

+1

C.在C中幾乎沒有多維數組不知道R,但要傳遞任何東西給C你應該將你的3D數組轉換爲1d緩衝區並將它與步幅信息一起傳遞。 –

回答

3

您已經找到了.Call()接口,它將允許您將R對象傳遞給C++。然後,您有(至少)兩個選擇:

  1. 使用通過R API C和宏作爲附帶R.它的工作原理寫作R附加軟件'說明書描述,很多人使用它,它具有通過了時間的考驗。這也有點乏味,至少對我的口味來說。

  2. 通過我們的Rcpp包和它在R API之上提供的API來使用C++。我們沒有太多的多維數組示例,但可以完成。在內部,這些當然是具有維度屬性的連續向量。

  3. 你也可以使用RcppRcppArmadillo具有適當「魔方」型,一般化從2D矩陣圖3d - SEEE的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> 

它並沒有做太多,除了返回你傳遞的數組的維向量對於實際的訪問,您可能需要計算。這個維度用手進行 - 我們根本沒有看到任何超出矩陣的需求。而最後一次我需要這個,我只用arma::cubeArmadillo通過RcppArmadillo

相關問題