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。
我的项目中有一个文件: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。