由于公司的 IT 要求,我被迫使用 R 3.2.2。我需要使用一些技术上需要 R > 3.2.2 的软件包(主要是 Prophet 版本 2 或更高版本)。我知道有时可以“欺骗”包在旧的、不兼容的 R 版本中运行,但我不确定如何做到这一点。
我使用较新版本的 R 下载了该包,然后按照 Patrick 此处的建议调整了描述文件 ( How to install an R package to R-3.3.0 from GitHub, which is built on R-3.4.0? ),并将包文件移动到 R 3.2.2 库路径中,但它不起作用。我收到错误“错误:这是 R 3.2.2,包‘prophet’需要 >= 3.2.3。”
有人有想法/建议吗?谢谢!
最佳答案
前面:@prosoitos 关于使用旧版本软件包的评论可能是您最好的选择,如果您能找到它们。我相信MRAN声称所有软件包的每日版本都可以追溯到很长一段时间,以及 checkpoint
用于卡住项目包状态的包。事实上,尝试使用该包,它可能会使下面的几个“技巧”(请不要随意使用它们)变得不必要。
2023 年更新:MRAN is retired 。 Posit(前身为 RStudio 公司)的 Posit Package Manager ,它提供(afaic)MRAN 的所有优势/功能;他们甚至还有 migrate from MRAN 的指南(虽然实际上不需要太多,但迁移相当简单)。
确实,某些软件包可能“错误地需要 R 版本”,而是方便地选择开发人员正在使用的 R 版本和/或他们从另一个软件包复制的任意版本。但是:
如果不了解包代码的内部结构,您就无法知道这是否是真正的需求。
如果开发人员认真使用适当定义的 R 版本要求,您可以查看包的提交历史记录(假设 github、gitlab 或其他一些可访问的版本控制)并在
中查找 R 版本何时更改描述
,并查看之前的提交以了解哪些更改建议版本增加。如果幸运的话,提交消息本身会说“添加参数 xyz=,需要更新的 R”之类的内容,但我怀疑这并不能保证,甚至不可能。缺少这一点,可能有一个函数(旧版或新版)需要较新版本的 R,但其他任何内容都没有更改。这对我来说似乎是合理的,并且可能再次需要一些调查来确认。
即使您发现了这一点,它也可能依赖于具有类似定义的版本要求的其他软件包。因此,即使您解决了一个包的问题,它也可能会级联成几个或几十个包。 (提示:也许
checkpoint
看起来更好,因为它对此有所帮助。)
如果您以某种方式确定 (a) 您知道 R 版本要求是错误的,或者 (b) 您知道它需要什么并且您愿意在没有这些参数或函数的情况下生活,那么:
- 克隆或下载源代码;
- 编辑
DESCRIPTION
并更改R版本,我建议您也更改包版本号,以便您知道您正在使用哪个版本;并且您还应该注意其他软件包的版本要求,因为它可能暗示 API 更改等;和 - 构建/安装本地版本。
但是......代码(和/或文档中的示例代码)可能存在细微差别,这些细微差别在旧版本中不起作用。而且,对一个包有效的方法不一定对另一个包有效。
这是一个真正的“买者自负”案例。密码破解的风险很高。必须对多个包执行此手动过程的可能性很高。第一次全部成功的可能性很低。
(当然,您可以随时联系开发人员/维护人员询问。)
关于r - 如何在旧的、不兼容的 R 版本上安装新的 R 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933547/