【问题标题】:Namespace dependencies not required不需要命名空间依赖项
【发布时间】:2012-10-16 15:12:41
【问题描述】:

我正在尝试构建一个 R 包,因此请阅读 CRAN 上的手册。 我可以发现,使用导入来加载命名空间中的函数是在描述文件中使用的最佳选择。 添加到描述文件后,我也将其添加到命名空间文件中。 我将 importFrom 添加到具有所需功能的命名空间文件中。

现在,当我对我的包运行 R CMD 检查时, 我得到一个错误

不需要命名空间依赖项: 'ggplot2'

更多信息:即使我将包添加到描述文件中的 Depends,它们也不会被加载。

请帮忙。

请在下面找到我的描述文件

Package: bigpackage
Type: Package
Title: Some title
Version: 1.0
Date: 2012-10-25
Author: Mayank Bansal
Maintainer: somename
Imports : R(>= 2.15.1), SweaveListingUtils( >=0.5.5),xtable(>=1.7-0),
        brew(>=1.0-6), knitr(>=0.8), RHive(>= 0.0-6), ggplot2(>=0.9.2)
        , brew, knitr
SystemRequirements : LaTeX(texi2dvi) must be present in the system to
        create PDF reports
Description: Some Description
License: file LICENSE
LazyLoad: yes
ByteCompile: true
OS_type : unix

【问题讨论】:

  • 您是否直接在您的 NAMESPACE 文件中从 ggplot2 导入任何内容?

标签: r


【解决方案1】:

如果您在 NAMESPACE 文件中使用 importimportFrom,您应该在您的 DESCRIPTION 文件的 Imports 部分中有该包的条目(除非有理由需要使用 Depends 在这种情况下包应该在 Depends 中有一个条目,而不是 Imports)

这里是Writing R Extensions的相关部分

“导入”字段列出了从其名称空间导入(在 NAMESPACE 文件中指定)但不需要附加的包。 '::' 和 ':::' 操作符访问的命名空间必须列在此处,或列在“Suggests”或“Enhances”中(见下文)。理想情况下,该字段将包含所有使用的标准包,并且包含使用 S4 的包很重要(因为它们的类定义可能会更改,并且DESCRIPTION 文件用于决定在发生这种情况时要重新安装哪些包)。在“Depends”字段中声明的包不应该也在“Imports”字段中。


我制作了一个带有单个函数 f 的包。我创建了一个 NAMESPACE 文件,其中包含与您所说的相同的 importFrom 行。

命名空间文件

export("f")
importFrom("ggplot2","ggplot","geom_histogram")

此时,如果我按预期运行R CMD check,则会收到错误消息:

不需要命名空间依赖:'ggplot2'

但是,如果我将Imports: ggplot2 添加到DESCRIPTION 文件中,这样我的DESCRIPTION 文件如下所示,它将毫无问题地通过R CMD check

描述文件

Package: anRpackage
Type: Package
Title: What the package does (short line)
Version: 1.0
Date: 2012-11-07
Author: Me
Maintainer: Who to complain to <yourfault@somewhere.net>
Description: More about what it does (maybe more than one line)
License: GPL
Imports: ggplot2

【讨论】:

  • 如果你没有在说明中包含 Imports 部分,它不会通过 R CMD 检查吗?
  • 你应该把它放在imports字段中,而不是在depends字段中。
  • @GSee - 是的,但是在依赖项下有 zoo,并且在命名空间中没有任何 zoo 导入。我的意思是,如果您的命名空间中有导入但未在您的说明中列出导入,那么它将无法通过 R CMD 检查 - 对吗?我认为 OP 只是对导入的确切作用感到困惑,他们预计它的行为类似于 Depends。如果他们想使用 Depends,那么他们不需要将包添加到他们的命名空间,如果他们想使用导入,他们需要在 Imports 字段和命名空间中添加一些东西。
  • 终于!你已经展示了你的DESCRIPTION文件。现在问题很清楚了。 “Imports”和“:”之间有一个空格,应该是Imports: ,而不是Imports :
【解决方案2】:

发生这种情况的一个简单原因是,如果您在任何/所有函数中声明 @import 时不小心使用了逗号

例如这个

#'
#' @import rvest, dplyr, stringr, jsonlite
#'
#' @export
#'

应该改成这个

#'
#' @import rvest dplyr stringr jsonlite
#'
#' @export
#'

这是一个常见错误,因为包 DESCRIPTION 文件中以逗号分隔

【讨论】:

    猜你喜欢
    • 2016-04-28
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多