为什么 `renv` 符号链接到旧包版本?

Why does `renv` symlink to older package version?

我正在开发一个 R 项目,其中包 renv 用于 manage project-local dependencies

当我第一次 运行 renv::init() 包做它的事情时,在我的项目中找到依赖项并将它们记录在本地项目目录中。根据 renv 文档,此本地目录中的每个包文件都是指向存储在全局 renv 包缓存中的 实际 包文件的符号链接。

现在,在全局缓存中,一些包有两个版本。例如,有一个 rlang v0.4.6 和一个 rlang v0.4.10。但是,出于某种原因 renv 决定符号链接到旧版本而不是新版本,这让我在尝试加载类似 tidyverse 的内容时感到头疼(这需要 rlang v0.4.10而不是 rlang v0.4.6).

有人知道如何解决这个问题吗?非常感谢。

renv::init() 基本上“分叉”用户库的状态以便在项目本地库中使用,因此最可能的解释是用户库中安装的 rlang 版本是 0.4.6。您可以在 renv 之外使用以下内容验证这一点:

find.package("rlang")
packageVersion("rlang")

解决此问题的最简单方法是在您的项目中安装 rlang 的更新版本;例如

install.packages("rlang")

或者,如果您想更新项目中使用的所有包,则可以使用:

renv::update()

最终,renv 只是为您的项目提供一个项目本地库,您可以根据特定项目的需要自由更新和安装不同版本的包。