Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
致命错误:RcppArmadilloExtensions/sample.h:没有这样的文件或目录_R_Rcpp_Devtools_Roxygen2 - Fatal编程技术网

致命错误:RcppArmadilloExtensions/sample.h:没有这样的文件或目录

致命错误:RcppArmadilloExtensions/sample.h:没有这样的文件或目录,r,rcpp,devtools,roxygen2,R,Rcpp,Devtools,Roxygen2,我会为缺乏一个可复制的例子提前道歉(目前)-如果没有这个答案,这不是一个容易的答案,我明天会做一个(尽管由于问题的性质,我不确定这会有多容易) 首先,我有我的第一个Rcpp代码项目工作!它的速度惊人,而且完全符合我的需要!感谢所有在这里帮助我的人,我很感激 我的下一个任务是将其添加到包中。我一直在使用Hadley Wickham的R软件包来组合我的软件包,所以我使用roxygen2和devtools::document()进行文档和常规检查,遵循这本书。我翻到了关于编译代码的章节(为了便于参考)

我会为缺乏一个可复制的例子提前道歉(目前)-如果没有这个答案,这不是一个容易的答案,我明天会做一个(尽管由于问题的性质,我不确定这会有多容易)

首先,我有我的第一个Rcpp代码项目工作!它的速度惊人,而且完全符合我的需要!感谢所有在这里帮助我的人,我很感激

我的下一个任务是将其添加到包中。我一直在使用Hadley Wickham的R软件包来组合我的软件包,所以我使用
roxygen2
devtools::document()
进行文档和常规检查,遵循这本书。我翻到了关于编译代码的章节(为了便于参考),并实现了这些步骤。具体而言:

  • 我运行了
    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>
                                            ^
(我看不出有什么问题,它在包外编译得很好)

我的描述文件专门导入了
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的文档。