2016-03-02 69 views
3

我有一个文件:import_packages.r在我的项目,包含以下内容:R:roxygen2,导入的包不会出现在命名空间

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

当我做这些devtools:document()包没有在空间文件,它们显示事实上并未导入。 我做错了什么?

+0

有时它有助于删除'NAMESPACE'文件,强制重新创建文件。 – drmariod

+0

@drmariod没有帮助。包仍然不出现在NAMESPACE – Tonja

回答

5

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

+2

也值得注意的是,不推荐完全导入很多包。 – hadley

+0

@hadley感谢您的参与。稍后我会补充几句关于更好的做法。 – Stibu