首页 > 解决方案 > 强制 R 包版本依赖的上限

问题描述

在开发 R 包时,我们使用DESCRIPTION 文件列出包依赖项(例如在“Imports”部分中),并且我们可以通过后缀“(>= xxx)”来指定每个包依赖项所需的最低版本。但是,指定最大版本的类似功能是什么?

一些上下文

有时,我们所依赖的外部包在发布时会出现重大更改,这些更改可能不再与正在开发的包兼容。每次使用重大更改更新外部包时更新我们的包是不可持续的。

例子

假设我正在开发一个名为“MarksPackage”的 R 包,它依赖于“dplyr”。到目前为止,我构建的所有内容都适用于 dplyr v1 的当前状态。但是,明天 dplyr v2 发布了影响我的包的重大更改。对于正在安装我的包的新用户,可能已经安装了最新的 dplyr v2,因此 MarksPackage 对他们不起作用。每次 dplyr 通过重大更改更新时,我不一定想要或能够去更新我的包。我宁愿指定一个最大版本,甚至是一个版本范围,我知道 MarksPackage 可以工作。

如何在说明文件中完成此操作?是否有类似的语法:

Package: MarksPackage
Imports: 
    dplyr (>= 0.8.5 & <=1.2.0),
    dbplyr,
    tidyr (<= 1.0.2)

标签: rr-package

解决方案


每当您对 R 扩展包的工作方式有疑问时,您都应该查阅编写 R 扩展手册。特别是在这里,您需要第 1.1.3 节,包依赖项,它在相关部分进行了解释

'Depends' 字段给出了这个包所依赖的包名的逗号分隔列表。当调用 library 或 require 时,这些包将附加在当前包之前。每个包名称可以选择后跟括号中的注释,指定版本要求。注释应包含比较运算符、空格和有效的版本号,例如“MASS (>= 3.1-20)”。

...

一个包或“R”可以在“Depends”字段中出现多次,例如给出可接受版本的上限和下限。

所以,对于你的例子,你会做

Package: MarksPackage
Imports: 
    dplyr (>= 0.8.5),
    dplyr (<= 1.2.0),
    dbplyr,
    tidyr (<= 1.0.2)

推荐阅读