2011-01-19 94 views
3

全部,使用R數學獨立庫的C++中的矩陣/矢量?

我一直在玩C語言中的R數學獨立庫。我很喜歡能夠生成隨機數並使用我從R中熟悉的分佈函數。我的問題是:是否可以使用R中可用的矩陣運算(乘法,轉置,反轉,Chol等)一個獨立的庫?我在Rmath.h中看不到它們。

如果矩陣操作可用於獨立的C++代碼,看起來R API成爲完美的開源計算引擎。人們是以這種方式使用它嗎?

非常感謝您的指導和建議!

+2

你有沒有考慮過[RInside](http://dirk.eddelbuettel.com/code/rinside.html)? – 2011-01-19 15:34:51

回答

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 2011-01-19 15:32:08

3

我認爲原來的問題始於錯誤的結局。 R中沒有C++,R中沒有C++ API。

所以如果你想訪問R矩陣函數,你必須通過R API--這是一個C層,非常多的是而不是 C++。加文在他的回答(和評論)和喬希現身:你可能想要像犰狳一樣的高級矩陣代數。犰狳(就像相關圖書館一樣)最終進入BLAS和LAPACK--就像R一樣。[Doug Bates通常提醒我們,有一個重要的區別與旋轉分解有關;這在fastLm()實現和RcppArmadillo中的示例中有所涉及。 ]

最後,RCPP可以用這兩種情況下幫助:

  • 是否要通過調用C++你寫的代碼,其中RCPP可以很容易地傳遞對象來回延長R,或

  • 是否要嵌入[R使用RInside你的C++應用程序中作爲RCPP再次提供了膠水

的RCPP-devel的列表是更加d的好地方epth討論和例子。