【问题标题】:How to properly include dependencies in R-package?如何在 R-package 中正确包含依赖项?
【发布时间】:2014-04-29 04:33:50
【问题描述】:

我现在尝试了几个小时在 R 中构建一个包,并且对我的进步有多慢感到有些绝望。我很快就构建了一个没有依赖项的包,一切正常。由于几篇文章的建议,我正在使用 R Studio、devtools 和 Roxygen2(在 Windows 上)。对于依赖项,我在检查时遇到问题(例如使用 devtools::check() ):

检查 R 代码中的依赖关系...注意 Imports 字段中的命名空间 未从:'ggplot2' 导入所有声明的 Imports 都应使用。 请参阅“创建 R”一章中有关说明文件的信息 'Writing R Extensions' 手册中的包'。

此外,check() 删除命名空间中的import(ggplot2) 行。如果我检查(document=F),它会给出一个关于未加载的digest 包的神秘错误。我阅读了'Writing R Extensions' - 1.1.3 Package Dependencies 和 Hadley's Wiki,了解如何编写包,但无法解决我的问题。 CRAN 中其他 R 包的说明和命名空间文件与我的看起来没有什么不同(在我看来)?

问题:我做错了什么?对于这样一个基本问题,我很抱歉,但我很茫然,到目前为止我看到的大多数分步教程在解释依赖关系之前都停止了。

到目前为止,我有 3 个文件:
描述:

Package: test
Type: Package
Title: Foo
Version: 1.0
Date: 2014-03-21
Author: Bar
Maintainer: Foo <bar@mail.com>
Description: Blubb
Imports:
    ggplot2
License: GPL-3

命名空间:

export(is.equal.null)
import(ggplot2)

一个 R 文件:

#' Extension of compare to include NULLs
#'
#' Works as an extension to usual compare
#' Compares two basic objects which in addition to usual compare can be NULL
#' Intuitive output: TRUE if both are equal or NULL resp., FALSE if both are unequal or only one is NULL
#'
#' @param obj1 Basic object like \code{numeric, char, boolean, NULL}
#' @param obj2 Basic object like \code{numeric, char, boolean, NULL}
#' @keywords compare
#' @export
#' @examples
#' is.equal.null(5,5)  # TRUE
#' is.equal.null(5,NULL)  # FALSE
#' is.equal.null(NULL,NULL)  # TRUE
is.equal.null <- function(obj1, obj2) {
  # Small helper function to generalize comparison to comparison of NULL
  # returns TRUE if both are NULL, and FALSE if only one of the objects is NULL
  bool <- obj1==obj2 
  #qplot(obj1)
  if (length(bool)) return(bool)
  if (is.null(obj1) & is.null(obj2)) return(TRUE)
  return(FALSE)
}

【问题讨论】:

    标签: r dependencies package


    【解决方案1】:

    您需要在两个处声明导入:

    1. 说明文件。您应该有类似于以下内容的行:

      Imports: ggplot2, pkg1, pkg2
      
    2. 命名空间文件。在这里你声明你需要的包

      import(ggplot2)
      

      或避免命名空间冲突

      importFrom(ggplot2, geom_point)
      

      您可以使用@import@importFrom 标签让roxygen2 维护NAMESPACE 文件。

    在您的示例中,您的说明文件看起来不错,但您尚未向 NAMESPACE 添加必要的功能。

    【讨论】:

    • 在我的 NAMESPACE 文件的顶部,我导入了几个包,我将它们全部列在了我的说明文件中的 Imports 下,但是当我安装我的包时它们仍然没有被安装。我错过了什么吗?另外,@csgillespie,当你说你可以让 roxygen2 来维护 NAMESPACE 文件时,你是什么意思。在我 roxygenise 之后,我一直在重新添加这些导入
    • roxygen2可以生成命名空间文件。
    • 是的,但是当我使用 roxygen2 生成命名空间文件时它不包含导入,它只包含导出,所以我必须手动添加它们
    • 谢谢@csgillespie!现在正确创建了 NAMESPACE 文件,但是当我从源代码安装包时,依赖项仍然没有安装。但这是一个单独的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 2019-02-05
    • 1970-01-01
    • 2011-04-03
    • 2014-03-24
    相关资源
    最近更新 更多