由于缺乏可重复的示例,我将提前道歉(如果没有),如果这不是一个简单的答案,我明天再做一个(尽管由于问题的性质,我不知道这有多容易)。
首先,我有我的第一个Rcpp代码项目!它的速度惊人的快,并且确实满足了我的需要!感谢所有在这里帮助过我的人,对此深表感谢。
我的下一个任务是将其添加到包中。我一直使用Hadley Wickham的 R软件包来整理我的软件包,因此在本书之后,我使用roxygen2
和devtools::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;
(我看不到任何错误,并且可以在程序包外部进行编译)。
我的描述文件专门导入了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和所有软件包,因此所有内容都使用最新版本。 (我也尝试了devtools
的github版本,结果相同)。
关于为什么无法使用sample.h
找到document()
扩展名的任何想法?
谢谢!
答案 0 :(得分:4)
您的C ++文件中有
// [[Rcpp::depends(RcppArmadillo)]]
对于Rcpp::sourceCpp()
,这将为要找到的RcppArmadillo
的头文件设置必要的编译器标志。这在包装中没有相同的效果。为了将其包含在软件包中,您需要在RcppArmadillo
的{{1}}中包含LinkingTo
:
DESCRIPTION
顺便说一句,正确使用结构的简单方法是使用
LinkingTo: Rcpp, RcppArmadillo
用于设置程序包框架。