使用roxygen2构建R包时出错

使用roxygen2构建R包时出错,r,rcpp,roxygen2,R,Rcpp,Roxygen2,我有两个文件,Rfile.R和Cppfile.cpp Cppfile.cpp中的内容: #include <Rcpp.h> using namespace Rcpp; // [[Rcpp::export]] int CPPF(int k){return ++k;} R文件中的内容: RF<-function(k){return(CPPF(k))} 我想基于这两个文件构建一个R包。我使用的是Rstudio和Roxygen2的最新版本 我尝试了3种方法来构建包含或不包含Roxy

我有两个文件,Rfile.R和Cppfile.cpp

Cppfile.cpp中的内容:

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int CPPF(int k){return ++k;}
R文件中的内容:

RF<-function(k){return(CPPF(k))}
我想基于这两个文件构建一个R包。我使用的是Rstudio和Roxygen2的最新版本

我尝试了3种方法来构建包含或不包含Roxygen2的软件包,结果不同:

新建项目->新建目录->R包->键入:包w/Rcpp,添加Rfile.R和Cppfile.cpp作为源文件。构建并重新加载,一切正常。这些函数的工作方式与它们的工作方式相同

新建项目->新建目录->R包->键入:包w/Rcpp,添加Rfile.R和Cppfile.cpp作为源文件。选择Generate documentations with Roxygen,选中其所有选项。构建并重新加载,这些函数不起作用。输入RF给出RF的内容,输入CPPF pops对象未找到

新建项目->新建目录->R包->类型:包w/Rcpp,仅添加Cppfile.cpp作为源文件。选择Generate documentations with Roxygen,选中其所有选项。构建并重新加载,该功能正常工作。 然后将Rfile.R直接复制到项目文件夹->R文件夹中。构建和重新加载,一切正常,功能正常

我是不是用错了Roxygen还是Roxygen有bug?我需要它来记录。我可以坚持走第三条路,这条路花费了我很多精力去寻找

谢谢

解决这个问题的一个方法是:
选择使用Roxygen生成文档时,不要选中名称空间文件选项。

如果选择2。如果不起作用,请将其作为可复制的错误报告提交给roxygen2团队

我看不到Rcpp问题;导入:/NAMESPACE声明可能出现问题。我认为这里没有Rcpp问题。很好


FWIW我也在一些软件包上使用roxygen2,我也在RStudio中不时构建它们。

不幸的是,您混淆了两件容易混淆的事情:

首先,//[[Rcpp::export]]属性用于在两个文件RcppExports.cpp和RcppExports.R中自动生成包装函数。包装器R函数CPPF将由Rcpp::compileAttributes在此处自动生成,并放入R/RcppExports.R中

第二,roxygen注释可用于管理名称空间,例如使用@export标记。请注意,这与//[[Rcpp::export]]不同

自动生成的函数不会自动导出。Rcpp.package.skeleton将生成自动导出给定名称的所有函数的名称空间文件;例如,exportPattern ^[:alpha:][]+条目。这对于小包装来说已经足够好了;但是,随着包变得越来越复杂,您将需要对名称空间进行更细粒度的控制。或者,您可以采用一种约定,即所有内部的、未导出的函数都以..开头。。无论哪种方式,这种机制都允许将自动生成的函数导出到包名称空间

如果您想使用RoXGEN管理命名空间,如果您希望将它们导出到命名空间中,则需要向您的C++函数添加ROXEGEN注释。因此,您可以按以下方式修改您的函数:

#include <Rcpp.h>
using namespace Rcpp;

//' @export
// [[Rcpp::export]]
int CPPF(int k){return ++k;}

请注意,对于新版本的roxygen2,您可能必须运行roxygen2::upgradeRoxygen,以确保roxygen2接管名称空间。

我刚刚发现问题实际上在名称空间文件中。非常感谢。对-我从来没有想过让工具修改自己的描述和名称空间。我只使用roxygen2生成Rd文件。