Моя задача переписать функцию R в C++ для ускорения циклов while. Все R-коды были переписаны с помощью Rcpp и Armadillo, кроме .Fortran()
. Сначала я пытаюсь использовать Rinside, и он работает на очень медленной скорости, как указал Дирк. (Для данных необходимо пройти через 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++, но я не могу заставить эти три вещи работать вместе!
Я пытаюсь скомпилировать C++ в Linux, но он просто не может найти RcppArmadillo.h
и namespace Rcpp
:
error: RcppArmadillo.h: No such file or directory
error: 'Rcpp' is not a namespace-name
Когда я sourceCpp("test.cpp")
вызываю sourceCpp("test.cpp")
в R, консоль будет отображать:
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")
Но я не знаю, как обращаться с пакетом TTTest
(я считаю, что он не может быть установлен) после добавления файлов .cpp
и .f
в /src
и запускать compileAttributes
.
Итак, можно ли делать что-то вроде Rcpp? Или нужно преобразовать коды Fortran в коды C/C++?
Спасибо за вашу помощь.