【问题标题】:R: roxygen2, imported packages do not appear in namespaceR:roxygen2,导入的包不出现在命名空间
【发布时间】:2016-03-02 15:08:15
【问题描述】:

我的项目中有一个文件:import_packages.r,包含以下内容:

#' @import reshape2
#' @import ggplot2
#' @import DESeq2
#' @import geneplotter
#' @import survcomp
#' @import gplots
#' @import pheatmap
#' @import RColorBrewer

当我执行devtools:document() 时,这些包没有显示在 NAMESPACE 文件中,实际上它们也没有导入。 我做错了吗?

【问题讨论】:

  • 有时它有助于删除NAMESPACE文件,强制重新创建文件。
  • @drmariod 没有帮助。包仍然没有出现在 NAMESPACE 中

标签: r roxygen2 roxygen


【解决方案1】:

如果您的文件只包含您提供的行,它会被 roxygen2 忽略。您应该在仅包含 NULL 的 roxygen 代码之后添加一行。所以以下应该工作:

#' @import reshape2 ggplot2 DESeq2 geneplotter
#' @import survcomp gplots pheatmap RColorBrewer
NULL

我还减少了行数,向您展示如何使用@import 一次性导入多个包。但是对于 roxygen 来说,分发包的行数并不重要。

我认为这是因为 roxygen 部分必须与某个 R 对象相关联。例如,函数的文档与相应的函数对象相关联。由于您不希望将导入与函数关联,因此可以将它们与 NULL 关联,这也是一个 R 对象。

正如hadley 正确指出的那样,不建议完全导入那么多包,因为最终可能会出现名称冲突。以下两种选择通常更好:

  • 使用显式包名和:: 运算符引用函数:reshape2::melt() 这具有额外的优势,您可以立即看到函数来自哪个包。

  • 使用@importFrom从包中只导入你需要的函数:

    #' @importFrom reshape2 melt cast
    

您可以找到更多信息here

【讨论】:

  • 另外值得注意的是,不推荐完全导入许多包。
  • @hadley 感谢您的意见。稍后我会添加一些关于更好做法的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多