致命错误:RcppArmadilloExtensions / sample.h:没有此类文件或目录

时间:2018-07-05 07:13:03

标签: r rcpp devtools roxygen2

由于缺乏可重复的示例,我将提前道歉(如果没有),如果这不是一个简单的答案,我明天再做一个(尽管由于问题的性质,我不知道这有多容易)。

首先,我有我的第一个Rcpp代码项目!它的速度惊人的快,并且确实满足了我的需要!感谢所有在这里帮助过我的人,对此深表感谢。

我的下一个任务是将其添加到包中。我一直使用Hadley Wickham的 R软件包来整理我的软件包,因此在本书之后,我使用roxygen2devtools::document()进行文档编制和常规检查。我转到了有关编译代码的章节(为便于参考,http://r-pkgs.had.co.nz/src.html),并实现了这些步骤。具体来说:

  • 我运行devtools::use_rcpp()来设置程序包以使用Rcpp。
  • 我在程序包的另一个函数中添加了适当的行。
  • 我将具有功能的文件复制到了新的src目录中。

然后我尝试更新文档(devtools::document()),但出现以下错误:

simulate_mean.cpp:2:44: fatal error: RcppArmadilloExtensions/sample.h: No such file or directory
 #include <RcppArmadilloExtensions/sample.h>
                                            ^

我一直在寻找stackexchange之类的东西,并且看到一则旧帖子,其中的一条评论是,顶部(Rcpp R sample equivalent from a NumericVector)需要// [[Rcpp::depends(RcppArmadillo)]]。这对我来说不是问题-该行在正确的位置,没有多余的空间(这是我在stackexchange上发现的另一个问题)。

文件的前几行如下:

#include <RcppArmadilloExtensions/sample.h>
// [[Rcpp::depends(RcppArmadillo)]]

using namespace Rcpp;

(我看不到任何错误,并且可以在程序包外部进行编译)。

我的描述文件专门导入了RcppRcppArmadillo。这是其中的相关部分:

Imports:
    dplyr(>= 0.7.4),
    purrr (>= 0.2.4),
    Rcpp (>= 0.12.17),
    RcppArmadillo (>= 0.8.600.0.0)
Suggests: mvtnorm (>= 1.0-6),
    testthat
Encoding: UTF-8
LazyData: true
RoxygenNote: 6.0.1
License: MIT + file LICENSE
LinkingTo: Rcpp

作为疑难解答的一部分,我已经更新了R和所有软件包,因此所有内容都使用最新版本。 (我也尝试了devtools的github版本,结果相同)。 关于为什么无法使用sample.h找到document()扩展名的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:4)

您的C ++文件中有

 // [[Rcpp::depends(RcppArmadillo)]]

对于Rcpp::sourceCpp(),这将为要找到的RcppArmadillo的头文件设置必要的编译器标志。这在包装中没有相同的效果。为了将其包含在软件包中,您需要在RcppArmadillo的{​​{1}}中包含LinkingTo

DESCRIPTION

顺便说一句,正确使用结构的简单方法是使用

LinkingTo: Rcpp, RcppArmadillo

用于设置程序包框架。