【问题标题】:NAMESPACE not generated by roxygen2. Skipped. - Confusion with Hadley bookNAMESPACE 不是由 roxygen2 生成的。跳过。 - 与哈德利书混淆
【发布时间】:2015-05-22 01:24:20
【问题描述】:

我正在尝试制作一个包,但是当我运行document() 时,它会打印NAMESPACE not generated by roxygen2. Skipped. 我正在尝试在我的函数中使用ggplot2,XML, R6 包。我通过以下方式导入它们:

#' @rdname visualization
#' @param hist_data A table of weather variables with PWS created by hist_data function
#' @param variable A character string of variable name
#' @examples
#' table <- getWeather(city = "San Francisco", state="CA")
#' please <- getConditionsTable(table, "2015-03-09")
#' tab <- hist_data(table, please)
#' head(tab)
#' plot_variable_across_all_pws(hist_data=tab, variable="tempi")
#' @import ggplot2
#' @import XML
#' @import R6

我想知道是什么导致了这个错误,我的Namespace 中除了exportPattern("^[^\\.]") 之外什么都没有

另外,我正在阅读 Hadley http://r-pkgs.had.co.nz/namespace.html 的 R 包书 并被这条线弄糊涂了:

"请注意,您可以选择使用 roxygen2 仅生成 NAMESPACE,仅生成 man/*.Rd,或两者兼而有之。如果您不使用任何与命名空间相关的标签,则 roxygen2 不会触及 NAMESPACE。如果您不使用任何与文档相关的标签,roxygen2 不会触及 man/。”

这是我做错了吗?还是失踪了?

【问题讨论】:

  • 您是否尝试过将导入文件放入DESCRIPTION文件中? roxygen2 从未接触过该文件

标签: r ggplot2 namespaces packages devtools


【解决方案1】:

我认为devtools 试图避免覆盖它自己没有生成的DESCRIPTION 和NAMESPACE 文件(以避免焦虑,如果你自己仔细地键入它们,而不是在你的r 代码中使用嵌入式roxygen cmets)。这并不总是可能的,但它会尝试。

据我了解,主要机制是在生成文件时在文件顶部发布评论,然后再查找该评论(边缘有一些棘手的地方,例如,如果您使用@includes 在DESCRIPTION 文件中创建整理顺序,但我认为这不是您的问题。)

这样的评论的一个例子是

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

not generated by ... 消息提醒您注意这一点,并让您知道 devtools 不会使用 roxygen2 为您创建 NAMESPACE 文件。你可能有你提到的没有评论的那个,因为你使用 RStudio 来启动你的包,而不是 devtools::create()

如果您只是删除 NAMESPACE 文件,我认为 devtools::document() 会为您工作。

顺便说一句,您在上面的示例代码中有错字(您有#' @import ggplo2 而不是#' @import ggplot2

【讨论】:

    【解决方案2】:

    也可以简单地从 NAMESPACE 中删除所有内容并添加一行:exportPattern("^[[:alpha:]]+")

    如果手动更改文件 NAMESPACE,devtools::document() 无法覆盖此文件,这就是它像以前一样离开的原因。当您从 NAMESPACE 文件中删除文本并插入此行时,devtools::document() 认为该文件是新文件并覆盖它。

    【讨论】:

    • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
    • 如果手动更改文件 NAMESPACE,devtools::document() 无法覆盖该文件,这就是它像以前一样离开的原因。当您从 NAMESPACE 文件中删除文本并插入此行时,devtools::document() 认为该文件是新文件并覆盖它。
    【解决方案3】:
    1. 备份 NAMESPACE 文件,如果您需要它以备将来使用
    2. 删除命名空间文件
    3. 运行devtools::document(),让roxygen2在包源目录下生成新的NAMESPACE文件

    *** 确保在 R 源文件的 roxygen2 doc 部分中有 @export 标签。

    【讨论】:

      【解决方案4】:

      前面的例子都不适合我。如果我删除了NAMESPACE 文件然后roxygen 抱怨没有NAMESPACE。如果我删除并重新创建了一个 NAMESPACE 文件(使用 `touch,例如 RStudio: Building package with roxygen2. Not producing NAMESPACE file)然后 roxygen 抱怨该文件不是使用 roxygen 创建的。

      解决方案是从另一个使用 roxygen 创建的项目中复制 NAMESPACE 文件。

      【讨论】:

        【解决方案5】:

        感谢@jsta 的解决方案,我在NAMESPACE 文件的顶部复制了以下行# Generated by roxygen2: do not edit by hand,然后是一个空行。

        然后我在控制台中运行devtools::document(),它自动替换了现有的NAMESPACE 文件。

        我认为顶行正是 roxygen 将查找的内容,以查看该文件是否由 roxygen 生成。

        【讨论】:

        • 请不要添加“谢谢”作为答案。相反,请为您认为有帮助的答案投票。
        • 也许我没有说清楚。这是对其他人答案的修改,但并不完全相同。 @jsta 提到复制和粘贴由 roxygen 生成的文件,但我只复制粘贴文件的顶行。我确实赞成原始答案。此外,我宁愿发表评论而不是发布作为答案,但我没有足够的声誉这样做;)
        猜你喜欢
        • 2015-07-06
        • 2014-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-06
        相关资源
        最近更新 更多