我遇到了这个奇怪的问题:当我尝试在我的cpp文件上使用我的sourcecpp()
时,会产生此错误:致命错误:' RcppArmadillo.h'找不到文件。
我的cpp文件是这样的
#include "RcppArmadillo.h"
// [[ Rcpp :: depends ( RcppArmadillo )]]
using namespace arma;
using namespace Rcpp;
...
但我很确定我有RcppArmadillo.h
而且奇怪的是,如果我使用cxxfunction(..., plugin="RcppArmadillo")
编译函数,一切都会正常工作。
更奇怪的是,在我运行cxxfunction()
函数后,sourcecpp()
会突然使用RcppArmadillo.h
处理所有cpp文件。
发生了什么事?
答案 0 :(得分:5)
这适用于正则表达式,并通过Rcpp::depends()
添加打破插件的正则表达式的所有空格。
有几十个贴出的例子;从什么起作用开始。以this simple example from the Rcpp Gallery为例,将以下内容放入/tmp/armaeigen.cpp
:
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
// [[Rcpp::export]]
arma::vec getEigenValues(arma::mat M) {
return arma::eig_sym(M);
}
/*** R
set.seed(42)
X <- matrix(rnorm(4*4), 4, 4)
Z <- X %*% t(X)
getEigenValues(Z)
*/
sourceCpp("/tmp/armaeigen.cpp")
不仅有效(即编译,链接和加载),而且还为您运行嵌入式示例:
R> sourceCpp("/tmp/armaeigen.cpp")
R> set.seed(42)
R> X <- matrix(rnorm(4*4), 4, 4)
R> Z <- X %*% t(X)
R> getEigenValues(Z)
[,1]
[1,] 0.331887
[2,] 1.685588
[3,] 2.409920
[4,] 14.210011
R>
Rcpp属性小插图包含所有细节。