我的任务是将一个R函数重写为C++,以加速while循环。所有的R代码都已经在Rcpp和Armadillo的帮助下进行了重写,除了.Fortran()
。我尝试使用Rinside进行加速,但速度非常慢,正如Dirk所指出的那样。(数据需要通过R -> C++ -> R -> Fortran的过程,这很耗时)
既然我不想将Fortran代码重写为C++,反之亦然,因此将C++直接链接到Fortran来加速程序似乎是很自然的选择:R -> C++ -> Fortran。
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadillo.h>
using namespace Rcpp;
extern "C"{
List f_(int *n,NumericMatrix a, NumericVector c, double* eps);
}
问题在于我可以将 C++ 与 Fortran 集成,将 R 与 C++ 集成,但我无法使这三个东西一起工作!
我尝试在 Linux 中编译 C++,但它找不到 RcppArmadillo.h
和 namespace Rcpp
:
error: RcppArmadillo.h: No such file or directory
error: 'Rcpp' is not a namespace-name
当我在R中直接调用sourceCpp("test.cpp")
时,控制台会显示:
test.o:test.cpp:(.text+0x20b2): undefined reference to `f_'
collect2: ld returned 1 exit status
Error in sourceCpp("test.cpp") : Error occurred building shared library.
我也尝试将所有这些东西结合在一起打包
RcppArmadillo::RcppArmadillo.package.skeleton("TTTest")
但是在我把.cpp
和 .f
文件添加到/src
并运行compileAttributes
后,我不知道如何处理TTTest
包(我认为它无法安装)。
那么,使用Rcpp可以像我想象的那样做吗?或者有必要将Fortran代码转换为C/C++代码吗?
感谢您的帮助。
include "RcppArmadillo.h"
这样,但它仍然找不到其他头文件。我怀疑使用 Rcpp 编译文件会花费更多时间,因为最终我会在 R 中调用该函数。 - Dajun Xu