【问题标题】:What does "Error in namespaceExport(ns, exports) : undefined exports" mean?“命名空间导出(ns,导出)中的错误:未定义的导出”是什么意思?
【发布时间】:2014-12-29 03:13:36
【问题描述】:

构建包时出现错误

Error in namespaceExport(ns, exports) : 
  undefined exports: FooBarBaz

这是什么意思,我该如何解决?

【问题讨论】:

    标签: r exception roxygen2


    【解决方案1】:

    当您尝试导出不存在的对象时会发生此错误。即包NAMESPACE文件包含这一行

    export(FooBarBaz)
    

    FooBarBaz 不存在于包中。


    当您尝试使用roxygen2 为多个函数创建通用帮助页面时,可能会发生此错误。在下面的示例中,fg 是相关函数,将记录在 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 行,代码将正常工作。

    【讨论】:

    • 这对我没有帮助
    • @MarcinKosiński 如果此答案不符合您的需求,那么 1)找出您的案例中出了什么问题并更新答案(这是一个社区 wiki,因此请随时编辑),或 2) 提出一个描述您的问题的新问题,并包括一个最小的可重现示例。否则你只是在拖钓。
    【解决方案2】:

    注意不要有任何以撇号开头的注释行!

    运气不好,在我的函数中,我注释掉了一个以撇号开头的行(在我的假例子中,在“太空堡垒卡拉狄加”前面),所以它看起来像这样:

    #' @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失败的例子吗?
    • @RichieCotton 一旦我弄清楚为什么我的出口有问题,我就替换了我的整个答案来回答你的问题。谢谢!
    • 对 cme​​ts 使用 hash + space 是个好主意。 CTRL+SHIFT+C(macOS 上的 CMD+SHIFT+C)在 RStudio 中执行此操作。
    【解决方案3】:

    我有一个非常愚蠢的错字:在 roxygen2 骨架中,我将要进入 #' @return 字段的内容复制到 @export

    应该是:

    #' @return new data frame
    #' @export
    

    相反,我有:

    #' @return
    #' @export new data frame
    

    【讨论】:

      【解决方案4】:

      我删除了一个函数,而 roxygen2 似乎没有从 NAMESPACE 文件中删除它。进入那里并手动删除该行,它将修复错误

      【讨论】:

        【解决方案5】:

        还有另一种方法,从GitHub repo下载包,然后Install &amp; Restart

        【讨论】:

          猜你喜欢
          • 2014-10-14
          • 2014-11-02
          • 1970-01-01
          • 1970-01-01
          • 2018-07-17
          • 2019-09-08
          • 2016-11-01
          • 1970-01-01
          • 2015-06-25
          相关资源
          最近更新 更多