sourcecpp找不到' RcppArmadillo.h',但cxxfunction可以

时间:2016-03-04 04:38:28

标签: rcpp

我遇到了这个奇怪的问题:当我尝试在我的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文件。

发生了什么事?

1 个答案:

答案 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属性小插图包含所有细节。