致命错误:RcppArmadilloExtensions/sample.h:没有这样的文件或目录
我会为缺乏一个可复制的例子提前道歉(目前)-如果没有这个答案,这不是一个容易的答案,我明天会做一个(尽管由于问题的性质,我不确定这会有多容易) 首先,我有我的第一个Rcpp代码项目工作!它的速度惊人,而且完全符合我的需要!感谢所有在这里帮助我的人,我很感激 我的下一个任务是将其添加到包中。我一直在使用Hadley Wickham的R软件包来组合我的软件包,所以我使用致命错误:RcppArmadilloExtensions/sample.h:没有这样的文件或目录,r,rcpp,devtools,roxygen2,R,Rcpp,Devtools,Roxygen2,我会为缺乏一个可复制的例子提前道歉(目前)-如果没有这个答案,这不是一个容易的答案,我明天会做一个(尽管由于问题的性质,我不确定这会有多容易) 首先,我有我的第一个Rcpp代码项目工作!它的速度惊人,而且完全符合我的需要!感谢所有在这里帮助我的人,我很感激 我的下一个任务是将其添加到包中。我一直在使用Hadley Wickham的R软件包来组合我的软件包,所以我使用roxygen2和devtools::document()进行文档和常规检查,遵循这本书。我翻到了关于编译代码的章节(为了便于参考)
roxygen2
和devtools::document()
进行文档和常规检查,遵循这本书。我翻到了关于编译代码的章节(为了便于参考),并实现了这些步骤。具体而言:
- 我运行了
将包设置为使用rcppdevtools::use_rcpp()
- 我将适当的行添加到包中的另一个函数中
- 我将带函数的文件复制到新的
目录中src
devtools::document()
),但出现以下错误:
simulate_mean.cpp:2:44: fatal error: RcppArmadilloExtensions/sample.h: No such file or directory
#include <RcppArmadilloExtensions/sample.h>
^
(我看不出有什么问题,它在包外编译得很好)
我的描述文件专门导入了Rcpp
和RcppArmadillo
。以下是其中的相关部分:
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和所有软件包,所以所有东西都使用最新版本。(我还尝试了github版本的devtools
,得到了相同的结果)。
关于使用document()
无法找到sample.h
扩展名的原因,您有什么想法吗
提前谢谢 < p>在C++文件中,你有< /p>
// [[Rcpp::depends(RcppArmadillo)]]
对于Rcpp::sourceCpp()
这将为要找到的RcppArmadillo
的头文件设置必要的编译器标志。这在包中没有相同的效果。为了将其包含在软件包中,您需要在说明中的链接中包含RcppArmadillo
:
LinkingTo: Rcpp, RcppArmadillo
顺便说一句,获得正确结构的简单方法是使用
RcppArmadillo::RcppArmadillo.package.skeleton()
< >设置包骨架。在C++文件中,你有
// [[Rcpp::depends(RcppArmadillo)]]
对于Rcpp::sourceCpp()
这将为要找到的RcppArmadillo
的头文件设置必要的编译器标志。这在包中没有相同的效果。为了将其包含在软件包中,您需要在说明中的链接中包含RcppArmadillo
:
LinkingTo: Rcpp, RcppArmadillo
顺便说一句,获得正确结构的简单方法是使用
RcppArmadillo::RcppArmadillo.package.skeleton()
用于设置软件包框架。如果您查看CRAN页面,您会看到大量软件包在链接到中列出。这提示有用吗?你相信R软件包书中的文档是可以的,但据我所知,它没有提到Rcpp使用Rcpp以外的软件包。如果您查看了RcppArmadillo文档,您会立即看到您需要的是链接到:
,而不是导入:
。如果您查看CRAN页面,您会看到大量的软件包在链接到中列出。这提示有用吗?你相信R软件包书中的文档是可以的,但据我所知,它没有提到Rcpp使用Rcpp以外的软件包。如果您看过RcppArmadillo文档,您会立即看到您需要的是链接到:
,而不是导入:
。正确的建议。使用foo包时,请遵循foo的文档。正确的建议。使用包foo时,请遵循foo的文档。