gpt4 book ai didi

r - 使用roxygen2构建R包时出错

转载 作者:行者123 更新时间:2023-12-03 19:01:17 25 4
gpt4 key购买 nike

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

Cppfile.cpp中的内容:

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int CPPF(int k){return ++k;}

Rfile.R中的内容:
RF<-function(k){return(CPPF(k))}

我想基于2个文件构建一个R包。我使用Rstudio和Roxygen2的最新版本。

我尝试了3种方法来构建带有或不带有Roxygen2的程序包,结果是不同的:
  • New Project-> New Directory-> R package-> Type:Package w/Rcpp,将Rfile.R和Cppfile.cpp都添加为源文件。构建并重新加载,一切正常。这些功能按原样工作。
  • New Project-> New Directory-> R package-> Type:Package w/Rcpp,将Rfile.R和Cppfile.cpp都添加为源文件。选择“使用Roxygen生成文档”,检查其所有选项。生成并重新加载,功能不起作用。输入“RF”给出RF的内容,输入“CPPF”会弹出“找不到对象”。
  • New Project-> New Directory-> R package-> Type:Package w/Rcpp,仅添加Cppfile.cpp作为源文件。选择“使用Roxygen生成文档”,检查其所有选项。生成并重新加载,该功能有效。
    然后将Rfile.R直接复制到项目文件夹-> R文件夹中。 Build&Reload,一切正常,功能正常。

  • 我是否使用了Roxygen错误或Roxygen有错误?我需要它来记录。我可以坚持第三种方法,这种方法花费了我很多精力,但却束手无策。

    谢谢!

    解决问题的一种方法:
    选择“使用Roxygen生成文档”时,请勿选中“NAMESPACE文件”选项。

    最佳答案

    您正在混淆两件事(不幸的是,它们很容易混淆):

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

    其次,roxygen注释可用于管理NAMESPACE,例如和@export标记。请注意,这与// [[Rcpp::export]]不同!

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

    如果要使用roxygen来管理NAMESPACE,则需要将roxygen注释添加到C++函数中,以便将它们导出到命名空间中。因此,您可以按以下方式修改函数:

    #include <Rcpp.h>
    using namespace Rcpp;

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

    请注意,对于新版本的 roxygen2::upgradeRoxygen(),您可能必须运行 roxygen2来确保 NAMESPACE接管 roxygen2

    关于r - 使用roxygen2构建R包时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23869956/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com