构建 R 包错误:对象列为导出,但不存在于命名空间中

问题描述 投票:0回答:4

我正在构建 R 包。最近,我删除并重命名了 R/allFunctions.R 中的几个函数。我以前能够自动更新 NAMESPACE,但由于某种原因,我现在无法这样做,并出现一些错误,如下所示:

library(packageName)
library(roxygen2)
library(devtools)
install()
ERROR: loading failed
* removing ‘/Library/Frameworks/R.framework/Versions/3.1/Resources/library/packageName’
* restoring previous ‘/Library/Frameworks/R.framework/Versions/3.1/Resources/library/packageName’
Error: Command failed (1)
document()
Updating packageName documentation
Loading packageName
Warning message:
In setup_ns_exports(pkg, export_all) :
  Objects listed as exports, but not present in namespace: functionOne, functionTwo

我清楚地看到,我有一些名称空间中不存在的对象被列为导出。但是,我删除了 allFunctions.R 文件中的所有 @export。我在 NAMESPACE 中看到一些新命名的函数名称不存在,而一些旧的(自重命名后)函数名称仍然存在。我可以手动更改它,但我知道这很危险,并且想避免那些糟糕的技术。

如果您有任何想法,请告诉我!谢谢。

r package
4个回答
21
投票

@jtr13 的答案也对我有用。只需第二次运行

devtools::document()
,警告就会消失。

> devtools::document()
Updating pavm documentation
Loading pavm
Writing NAMESPACE
Deleting evlCalcTime.Rd
Deleting initTimeStamp.Rd
Warning message:
In setup_ns_exports(pkg, export_all) :
Objects listed as exports, but not present in namespace: evlCalcTime, 
initTimeStamp

> devtools::document()
Updating pavm documentation
Loading pavm

3
投票

我刚刚做了类似的事情:我从 R/allFunctions.R 中删除了 3 个导出函数并运行 devtools::document()。这给了我以下错误:

Warning message:
In setup_ns_exports(pkg, export_all) :
  Objects listed as exports, but not present in namespace: getAccounts, getClients, getDeposits

我通过手动从 NAMESPACE 文件中删除 3 个 export() 函数解决了这个问题。


1
投票

根据我的经验,这通常是函数定义和 roxygen 语句之间的拼写错误,特别是在涉及驼峰命名法时,例如:

#' @export functionOne
functionone <- function() { ... }

0
投票

这是一个老问题,但对于发现它的任何人来说:可以通过在函数定义中使用双赋值箭头 (

<<-
) 而不是标准箭头 (
<-
) 来生成此错误(至少在 devtools 2.4 中是这样)。 5 和 roxygen2 7.3.1)

© www.soinside.com 2019 - 2024. All rights reserved.