【发布时间】:2014-12-29 03:13:36
【问题描述】:
构建包时出现错误
Error in namespaceExport(ns, exports) :
undefined exports: FooBarBaz
这是什么意思,我该如何解决?
【问题讨论】:
构建包时出现错误
Error in namespaceExport(ns, exports) :
undefined exports: FooBarBaz
这是什么意思,我该如何解决?
【问题讨论】:
当您尝试导出不存在的对象时会发生此错误。即包NAMESPACE文件包含这一行
export(FooBarBaz)
但FooBarBaz 不存在于包中。
当您尝试使用roxygen2 为多个函数创建通用帮助页面时,可能会发生此错误。在下面的示例中,f 和 g 是相关函数,将记录在 WidgetUtils 页面中。
#' Widget-related functions
#'
#' Utility functions to assist working with widgets.
#' @param x An input.
#' @return A value.
#' @name WidgetUtils
#' @export
NULL
#' @rdname WidgetUtils
#' @export
f <- function(x)
{
x + 1
}
#' @rdname WidgetUtils
#' @export
g <- function(x)
{
x - 1
}
此代码块中的错误是WidgetUtils roxygen 块中包含@export 标记。这告诉 roxygen 在NAMESPACE 文件中生成导出行,但它的值是NULL,所以没有什么要导出的。通过删除@export 行,代码将正常工作。
【讨论】:
注意不要有任何以撇号开头的注释行!
运气不好,在我的函数中,我注释掉了一个以撇号开头的行(在我的假例子中,在“太空堡垒卡拉狄加”前面),所以它看起来像这样:
#' @export
getMyFavoriteSciFiShows <- function() {
myFavoriteSciFiShows <-
c('Star Trek Next Generation',
#'Battlestar Galactica',
'Babylon 5')
return(myFavoriteSciFiShows)
}
这真的搞砸了 roxygen2 v 6.0.1,因为它没有发出任何错误信号,这就是它放入我的 NAMSEPACE 文件的内容:
export("Galactica',")
export(Battlestar)
不仅缺少我想要的导出 myFavoriteSciFiShows,而且还添加了两个错误的导出。这些错误的可能会导致未定义的导出。
【讨论】:
#' @export失败的例子吗?
我有一个非常愚蠢的错字:在 roxygen2 骨架中,我将要进入 #' @return 字段的内容复制到 @export。
应该是:
#' @return new data frame
#' @export
相反,我有:
#' @return
#' @export new data frame
【讨论】:
我删除了一个函数,而 roxygen2 似乎没有从 NAMESPACE 文件中删除它。进入那里并手动删除该行,它将修复错误
【讨论】:
还有另一种方法,从GitHub repo下载包,然后Install & Restart
【讨论】: