使用R数学独立库在C++中的矩阵/向量?

3

大家好,

我一直在使用C++中的R数学独立库。我很喜欢能够生成随机数并使用我熟悉的R分布函数。我的问题是:是否可以在独立库中使用R中可用的矩阵运算(乘法、转置、求逆、Chol等)?我在Rmath.h中没有看到它们。

如果矩阵运算可以在独立的C++代码中使用,那么R API就成为了完美的开源计算引擎。人们是否以这种方式使用它呢?

非常感谢您的指导和建议!


2
你考虑过RInside吗? - Joshua Ulrich
2个回答

3

大多数,如果不是所有的事情,都是由R链接到的LAPACK或BLAS Fortran代码提供的,而不是R自己提供新代码。

如果您有兴趣使用C++与R一起使用,请查看Dirk Eddelbuettel和Romain Francois的Rcpp包。Dirk还编写了RcppArmadillo包,作为Armadillo C++线性代数库的接口,可以执行您提到的矩阵操作。

这是否有用取决于您是想编写在R之外访问的单独的C++代码,还是接口C++代码,在R中访问。 Rcpp极大地促进了后者。如果是前一种情况,请直接查看Armadillo。


我已经了解了Rcpp,感到非常印象深刻。目前我的想法是在独立的C++代码中使用R API。如果以后我决定将R和C++进行接口交互,我一定会考虑使用Rcpp。 - TJB
1
@TJB,如果是这样的话,我想您会感到很遗憾,因为R正在重复使用其线性代数中的标准(在计算统计学界)Fortran库。请尝试使用Armadillo C++库。 - Gavin Simpson

3
我认为原始问题的起点是错误的。R中没有C++,也没有R本身的C++ API。因此,如果你想访问R矩阵函数,你必须通过R API来进行——这是一个C层,非常不是C++。
Gavin在他的答案(和评论)和Josh是正确的:你可能需要像Armadillo这样的高级矩阵代数库。Armadillo(就像相关的库一样)最终会转到BLAS和LAPACK——正如R一样。 [Doug Bates通常提醒我们有一个重要的差异,涉及到枢轴分解;这在RcppArmadillo的fastLm()实现和示例中有所涉及。]
最后,Rcpp可以帮助两种情况:
- 你想通过调用你编写的C++代码扩展R,其中Rcpp使得对象来回传递变得容易,或者 - 你想使用RInside将R嵌入到你的C++应用程序中,再次使用Rcpp提供粘合剂
rcpp-devel列表是更深入的讨论和示例的好地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接