在特定日期安装多个 CRAN 上的软件包?

3

假设有人五年前编写了一个完美工作的脚本,但是当今安装软件包后该脚本无法运行(并且假设某些软件包的更改非常重要)。

有没有一种按日期安装CRAN软件包的方法。例如:


install_CRAN_by_date("2016-05-01", c("rgdal", "sp", "dplyr", "trip"))

有没有简单的函数可以做到这一点?


有一个名为versions的选项,即install.versions,您可以在其中指定软件包版本。如果您不知道版本号,可以使用available.versions('rgdal')进行查询。 - akrun
为此,用户需要知道确切的日期,对吗?这不是手动的吗? - akrun
您可以使用 available.versions('dplyr'),它还会返回 'date' 和 version - akrun
@akrun 基本上,用户有一个5年前的脚本,现在已经无法使用了,但如果她能够安装5年前的软件包,我认为它会起作用。 - stevec
@GregorThomas 谢谢!有没有简单的方法来使用这些,例如 install_CRAN_by_date("2016-05-01", c("rgdal", "sp", "dplyr", "trip")),或者仍然需要一点手动工作访问快照,下载它们,并从本地源文件安装?(我知道这不是非常困难的工作,但如果没有人编写已经为我们完成了这项工作,我会感到惊讶) - stevec
显示剩余3条评论
2个回答

4
使用checkpoint软件包和Microsoft的"CRAN Time Machine",它包含自2014年以来每日CRAN的快照。
请参阅checkpoint示例。基本上你需要这样做:
library(checkpoint)
checkpoint("2015-01-01")
library(your_favorite_cran_package)

3
假设 UI 给出了例如 'dplyr' 的正确发布日期 ('input_date'),根据 'input_date' 与 'available.versions' 中的 'version' 列之间的 'match' 获取 'version' 并使用其通过 'install.versions' 进行安装。
library(versions)
input_date <- "2019-06-29"
dplyr_versions <- available.versions('dplyr')$dplyr
vers <- dplyr_versions[match(input_date, dplyr_versions$version)]$version
install.versions('dplyr', vers)

有多个软件包,不确定它们是否具有相同的发布日期。但如果是这样的话,使用带有 lapply 循环的方式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接