首页 > 解决方案 > 如何在旧的、不兼容的 R 版本上安装新的 R 包

问题描述

由于我公司的 IT 需求,我被迫使用 R 3.2.2。我需要使用一些技术上需要 R > 3.2.2(主要是先知版本 2 或更高版本)的软件包。我知道有时可以“欺骗”包在较旧的、不兼容的 R 版本中运行,但我不确定如何执行此操作。

我使用较新版本的 R 下载了该软件包,然后按照 Patrick 此处的建议调整了描述文件(如何从 GitHub 将 R 软件包安装到 R-3.3.0,它是基于 R-3.4.0 构建的?),并且将包文件移动到 R 3.2.2 库路径中,但它不起作用。我收到错误“错误:这是 R 3.2.2,包 'prophet' 需要 >= 3.2.3。”

有没有人有想法/建议?谢谢!

标签: rfacebook-prophet

解决方案


预先:@prosoitos 关于使用旧版本软件包的评论可能是你最好的选择,如果你能找到它们。我相信MRAN声称拥有所有包的每日版本,以及checkpoint用于冻结项目包状态的包。实际上,尝试使用该软件包,它可能会使以下几个“技巧”(请不要随便使用)变得不必要。


确实,某些包可能“错误地需要 R 版本”,而是方便地选择开发人员正在使用的 R 版本和/或他们从另一个包复制的任意版本。然而:

  1. 如果不了解包代码的内部结构,您就无法知道这是否是真正的需求。

    如果开发者有意识地使用适当定义的 R 版本要求,你可以通过包的提交历史(假设 github、gitlab 或其他一些可访问的版本控制)找到 R 版本何时更改DESCRIPTION,并查看前面的提交以查看建议版本增加的更改。如果幸运的话,提交消息本身会说“添加参数 xyz=,需要更新的 R”,但我怀疑这并不能保证甚至是不可能的。

  2. 缺少这一点,可能有一个功能(旧的或新的)需要更新版本的 R,但没有其他任何改变。这对我来说似乎是合理的,并且可能再次需要一些调查来确认。

  3. 即使您发现了这一点,它也很可能依赖于具有类似定义的版本要求的其他包。因此,即使您为一个包解决了问题,它也可能级联成几个或几十个包。(提示:也许checkpoint看起来更好,因为它对此有所帮助。)

如果您以某种方式确定(a)您知道 R 版本的要求是错误的,或者(b)您知道它需要什么并且您愿意在没有这些参数或函数的情况下生活,那么:

  1. 克隆或下载源代码;
  2. 编辑DESCRIPTION和更改R版本,我建议您也更改包版本号,以便您知道您使用的是哪个版本;您还应该注意其他软件包的版本要求,因为它可能暗示 API 更改等;和
  3. 构建/安装本地版本。

但是......代码(和/或文档中的示例代码)可能存在细微差别,这些细微差别在旧版本中不起作用。而且,适用于一个包的不一定适用于另一个包。

这是一个真实的买者自保案例。代码破解的风险很高。必须为多个包执行此手动过程的可能性很高。第一次全部成功的可能性很低。

(当然,您可以随时联系开发人员/维护人员询问。)


推荐阅读