R:roxygen2,导入的包没有出现在命名空间中

R: roxygen2, imported packages do not appear in namespace

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

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

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

如果您的文件只包含您提供的行,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