【问题标题】:Rpackage: Rstudio possibly generating bad NAMESPACE fileR 包:Rstudio 可能生成错误的 NAMESPACE 文件
【发布时间】:2015-07-14 23:48:51
【问题描述】:

我正在 Rstudio 中制作一个 R 包,我选择了选项 Configure Build Tools > Configure 并选择了 Use roxygen to generate NAMESPACE。我在 Rcpp 中编写了我的函数,这就是我使用 roxygen2 生成 NAMESPACE 时的样子:

# Generated by roxygen2 (4.1.1): do not edit by hand

export(function1)
export(function2)
export(function3)
export(function4)

由于我的函数是用 Rcpp 编写的,然后我将其导出,因此它们将通过 .Call 在 R 中使用。但是,在这种情况下,我们应该从writing R extensions 使用useDynLib()。这就是为什么我认为当我尝试调用 function1 时出现错误并且错误是:

Error in .Call("Mypackage_function1", PACKAGE = "Mypackage", var1,  : 
"Mypackage_function1" not available for .Call() for package "Mypackage"

当我在 Rstudio 中启动项目时使用默认的NAMESPACE 时,NAMESPACE 中有以下内容:

useDynLib(packagename)
exportPattern("^[[:alpha:]]+")
importFrom(Rcpp, evalCpp)

当我使用默认的NAMESPACE 时,我可以使用.Call 调用函数,但是当我检查我没有使用roxygen 生成NAMESPACE 的包时收到警告。

有解决办法吗?任何建议表示赞赏。

【问题讨论】:

    标签: r namespaces rcpp


    【解决方案1】:

    这与 RStudio 的使用无关:为了让 Roxygen 生成相关的useDynLib 规范,you need to use the @useDynLib tag in a Roxygen doc comment

    #' @useDynLib packagename
    

    您可以在任何地方(可以使用普通 Roxygen cmets)执行此操作,但将其放入包文档而不是特定函数的文档中是有意义的。通常这驻留在一个名为 R/packagename-package.r 的文件中:

    #' My package documentation
    #' … bla bla …
    #' @name packagename
    #' @docType package
    #' @useDynLib packagename
    NULL
    

    【讨论】:

      猜你喜欢
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多