12

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

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

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

4

1 回答 1

17

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

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

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

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

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

  • 带有显式包名称和运算符的引用函数::reshape2::melt()这具有您立即看到的附加优势,即函数来自哪个包。

  • 仅使用以下方法从包中导入您需要的功能@importFrom

    #' @importFrom reshape2 melt cast
    

您可以在此处找到更多信息。

于 2016-03-02T16:02:57.407 回答