2011-01-19 98 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讨论和例子。