名称空间不是由 roxygen2 生成的。跳过。 - 与哈德利书混淆

NAMESPACE not generated by roxygen2. Skipped. - Confusion with Hadley book

我正在尝试制作一个包,但是当我 运行 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 包书 并被这条线弄糊涂了:

"Note that you can choose to use roxygen2 to generate just NAMESPACE, just man/*.Rd, or both. If you don’t use any namespace related tags, roxygen2 won’t touch NAMESPACE. If you don’t use any documentation related tags, roxygen2 won’t touch man/."

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

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

据我了解,主要机制是在生成文件时在文件顶部post注释,然后在稍后查找该注释(周围有棘手的位边缘,例如,如果您使用 @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

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

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

  1. 备份 NAMESPACE 文件,以备将来使用
  2. 删除命名空间文件
  3. 运行 devtools::document(),这样roxygen2会在包源目录下生成新的NAMESPACE文件

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

前面的示例中的

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

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

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

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

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