Rpackage:Rstudio 可能生成错误的 NAMESPACE 文件
Rpackage: Rstudio possibly generating bad NAMESPACE file
我正在 Rstudio 中制作 R 包,我 select 编辑了选项 Configure Build Tools > Configure
和 select 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
的包时,我收到警告。
有解决办法吗?任何建议表示赞赏。
这与RStudio的使用无关:为了让Roxygen生成相关的useDynLib
规范,you need to use the @useDynLib
tag in a Roxygen doc comment:
#' @useDynLib packagename
您可以在任何地方执行此操作(您可以在其中使用普通的 Roxygen 注释),但是将其放入包文档而不是特定函数的文档中是有意义的。通常这位于一个名为 R/packagename-package.r
:
的文件中
#' My package documentation
#' … bla bla …
#' @name packagename
#' @docType package
#' @useDynLib packagename
NULL
我正在 Rstudio 中制作 R 包,我 select 编辑了选项 Configure Build Tools > Configure
和 select 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
的包时,我收到警告。
有解决办法吗?任何建议表示赞赏。
这与RStudio的使用无关:为了让Roxygen生成相关的useDynLib
规范,you need to use the @useDynLib
tag in a Roxygen doc comment:
#' @useDynLib packagename
您可以在任何地方执行此操作(您可以在其中使用普通的 Roxygen 注释),但是将其放入包文档而不是特定函数的文档中是有意义的。通常这位于一个名为 R/packagename-package.r
:
#' My package documentation
#' … bla bla …
#' @name packagename
#' @docType package
#' @useDynLib packagename
NULL