为什么`renv`不还原旧版R不推荐使用的软件包?

问题描述

我有以下设置:

  • 我从git repo初始化了一个新的R-Project(R 3.4.3)。
  • 回购中的项目使用renv(0.11.0)来快照项目包
  • renv.lock文件包含多个软件包。其中之一是raster,版本为2.9-5

由于CRAN上raster软件包的较新版本更改了R依赖关系(R> = 3.5),因此renv无法还原该软件包,因为renv找不到{{ 1}}封装在CRAN上。

消息:

raster

在git repo上的项目是使用R版本3.4.3构建的。我也为此项目使用了本地仓库,但这根本不会引起问题。

是否有任何建议可以使Error: package 'raster' is not available 正常工作?

解决方法

renv 0.12.0对我来说似乎很有效。使用此锁定文件:

{
  "R": {
    "Version": "3.4.4","Repositories": [
      {
        "Name": "CRAN","URL": "https://cran.rstudio.com"
      }
    ]
  },"Packages": {
    "Rcpp": {
      "Package": "Rcpp","Version": "1.0.5","Source": "Repository","Repository": "CRAN","Hash": "125dc7a0ed375eb68c0ce533b48d291f"
    },"lattice": {
      "Package": "lattice","Version": "0.20-35","Hash": "10a22a9a66fbe7944e9ef98985d7c927"
    },"raster": {
      "Package": "raster","Version": "2.9-5","Hash": "85a01c2f0ad30d43f51b861a2d78d5e8"
    },"renv": {
      "Package": "renv","Version": "0.12.0","Hash": "7340c71f46a0fd16506cfa804e224e44"
    },"sp": {
      "Package": "sp","Version": "1.4-4","Hash": "e0485290545c0e768c2b50390114da1f"
    }
  }
}

我在renv::restore()上看到以下内容:

> renv::restore()
The following package(s) will be updated:

# CRAN ===============================
- Rcpp     [* -> 1.0.5]
- raster   [* -> 2.9-5]
- sp       [* -> 1.4-4]

Do you want to proceed? [y/N]: y
* Querying repositories for available binary packages ... Done!
* Querying repositories for available source packages ... Done!
Retrieving 'https://cran.rstudio.com/src/contrib/Rcpp_1.0.5.tar.gz' ...
        OK [file is up to date]
Retrieving 'https://cran.rstudio.com/src/contrib/Archive/raster/raster_2.9-5.tar.gz' ...
        OK [file is up to date]
Retrieving 'https://cran.rstudio.com/src/contrib/sp_1.4-4.tar.gz' ...
        OK [file is up to date]
Installing Rcpp [1.0.5] ...
        OK [built from source]
Installing sp [1.4-4] ...
        OK [built from source]
Installing raster [2.9-5] ...
        OK [built from source]

如果即使更新到renv 0.12.0后仍然存在问题,我建议在https://github.com/rstudio/renv/issues提交具有一些额外上下文的问题。

,

这些建议对我没有用。但是我通过忽略renv的缓存解决了这个问题。似乎在renv中缓存程序包会导致此错误。

解决方案: 在使用use.cash之前,我确实将renv设置F设置为renv::restore()

如果有人对此有更多了解或拥有有关renv中缓存的良好文档,我将不胜感激。