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

Ali*_*ina 10 r roxygen roxygen2

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

#' @import reshape2
#' @import ggplot2
#' @import DESeq2
#' @import geneplotter
#' @import survcomp
#' @import gplots
#' @import pheatmap
#' @import RColorBrewer
Run Code Online (Sandbox Code Playgroud)

当我这样做时,devtools:document()这些包不会显示在NAMESPACE文件中,并且实际上并未导入它们.难道我做错了什么?

Sti*_*ibu 11

如果您的文件只包含您提供的行,则roxygen2会忽略它.你应该在包含just的roxygen代码之后添加一行NULL.所以以下应该有效:

#' @import reshape2 ggplot2 DESeq2 geneplotter
#' @import survcomp gplots pheatmap RColorBrewer
NULL
Run Code Online (Sandbox Code Playgroud)

我还减少了向你展示的行数,如何通过一次使用来导入多个包@import.但是对于roxygen而言,分配包裹的线数并不重要.

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

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

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

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

    #' @importFrom reshape2 melt cast
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 另外值得注意的是,不建议完全导入许多包. (4认同)