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

13

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

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

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


2
有时候删除 NAMESPACE 文件可以帮助强制重新创建该文件。 - drmariod
1
@drmariod没有帮助。包仍然未出现在NAMESPACE中。 - Alina
1个回答

19

如果您的文件仅包含您提供的行,则roxygen2将忽略它。您应该在roxygen代码之后添加一行,只包含NULL。因此,以下内容应该有效:

如果您的文件仅包含您提供的行,则roxygen2将忽略它。您应该在roxygen代码之后添加一行,只包含NULL。因此,以下内容应该有效:
#' @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
    

您可以在这里找到更多信息。


5
值得注意的是,完全导入许多包不是推荐的做法。 - hadley
@hadley 感谢您的建议。稍后我会添加一些关于更好实践的内容。 - Stibu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接