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

时间:2016-03-02 15:08:16

标签: r roxygen2 roxygen

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

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

当我执行devtools:document()时,这些包未显示在NAMESPACE文件中,并且实际上并未导入它们。 我做错了吗?

1 个答案:

答案 0 :(得分:11)

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

    仅从包中导入所需的功能
    <xsl:template name="SUBREPORT_FIELDS" >
      <xsl:for-each select="current()/section/@name">
        <xsl:choose>
          <xsl:when test="current()/section/@name = $pSectionName">
            <xsl:call-template name="FieldSezione"/>
            <xsl:call-template name="FIELDS"/>
          </xsl:when>
          <xsl:otherwise>
            <xsl:call-template name="SUBREPORT_FIELDS"/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </xsl:template>
    

您可以找到更多信息here