【问题标题】:Install multiple packages as they existed on CRAN at a specific date?安装多个软件包,因为它们在特定日期存在于 CRAN 上?
【发布时间】:2021-05-21 00:23:48
【问题描述】:

假设某人在 5 年前编写了一个运行良好的脚本,但在今天安装软件包时它不起作用(并假设对某些软件包的更改非常重要)。

有没有办法在 date 之前安装 CRAN 包。例如


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

有什么简单的函数可以做到这一点吗?

【问题讨论】:

  • 有一个带有versions 的选项,即install.versions,您可以在其中指定软件包版本,如果您不知道版本,请与available.versions('rgdal') 联系
  • 谢谢@akrun!您是否知道是否有任何内容甚至从版本中抽象出来,并且只是迄今为止?因此,用户输入一个日期,该函数(如果存在)会根据您的建议计算出需要安装的版本并使用 versions 参数运行 install.packages()
  • 为此,用户需要知道确切的日期对吗?那不是手册吗
  • 您可以拥有available.versions('dplyr'),它还返回“日期”和“版本”
  • @akrun 基本上用户有一个 5 年前的脚本并且不再工作了,但如果她能像 5 年前一样安装软件包,我认为它会工作。

标签: r cran


【解决方案1】:

使用 checkpoint 包和 Microsoft 的 "CRAN Time Machine" 包,其中包含可追溯到 2014 年的 CRAN 每日快照。

有关示例,请参阅this checkpoint vignette。基本上你会这样做

library(checkpoint)
checkpoint("2015-01-01")
library(your_favorite_cran_package)

【讨论】:

    【解决方案2】:

    假设,用户界面给出了正确的发布日期('input_date'),例如'dplyr'。根据available.versions的'input_date'和'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的循环

    【讨论】:

      猜你喜欢
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多