【问题标题】:Non-manual solution to "cannot remove prior installation of package" when re-installing R packages重新安装 R 包时“无法删除先前安装的包”的非手动解决方案
【发布时间】:2022-07-31 18:03:51
【问题描述】:

我最近开始收到警告说,当我尝试重新安装包时,无法删除以前安装的 R 包:

install.packages("gtools")
#> Warning: cannot remove prior installation of package ‘gtools’
#> Warning: restored ‘gtools’

我找到了解决这个问题的方法,鼓励我从我的库文件夹中手动删除这些包,我可以使用.libPaths() 找到该包。但是,(a)这似乎是一种解决症状而不是根本问题(尚不清楚)的方法,并且(b)看似不同的 R 版本有两条路径,我不确定从哪个中删除:

.libPaths()           
#> [1] "C:/Users/foo/Documents/R/win-library/4.1"
#> [2] "C:/Program Files/R/R-4.1.2/library"

我该如何解决这个问题,这样我就不必在每次想要重新安装软件包时手动删除软件包文件夹?如果没有其他选择,我是否需要从这些文件夹之一或两者中删除包的子目录? FWIW,我在 RStudio 工作。

【问题讨论】:

  • 重启R或使用detach("package:gtools", unload=TRUE)卸载包(在当前R或其他打开的R会话中)。

标签: r


【解决方案1】:

问题是您使用不同的权限安装了软件包。在 Windows 上,您需要提升权限才能写入 Program Files。在某些时候,您(或管理员)可能使用“以管理员身份运行”在那里安装 gtools,现在使用常规权限您无法删除它。

如果您以foo 用户身份运行,您应该能够删除Users/foo 副本,但即使是该用户也可能已更改权限。但我猜问题是gtoolsProgram files 位置。

来自 R 的错误消息并没有告诉您它试图删除哪个版本,这很不幸。事实上,允许在这两个位置安装不同的版本是 R 中的一个糟糕的设计特性,只会导致混乱,因为每次加载包时不一定总是使用相同的版本。 (您使用哪个规则是在.libPaths 列表中找到的第一个可接受的规则,但是由于您可以更改.libPaths,并且由于包可以加载其他包,因此很难预测您将加载哪个包任何给定时间。)

要解决此问题,您可以删除两个副本并重新开始,但这样做有风险,因为其他软件包可能依赖于 gtools。如果您是计算机上的唯一用户,则可以改为删除整个 "C:/Users/foo/Documents/R/win-library/4.1" 库,然后使用“以管理员身份运行”进行所有安装,但这也很容易搞砸。

(在 Mac 上,实际上就是这样,因为大多数单用户系统将用户放在“管理员”组中,因此他们始终可以将软件包安装到系统位置。这会减少很多混乱,但有些“纯粹主义者” " 认为 Windows 方式更好。)

所以我对你没有什么好的建议,但也许这可以解释这种情况,你可以自己制定出最好的前进方向。

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 2018-07-24
    • 1970-01-01
    • 2011-04-16
    • 2017-06-14
    • 1970-01-01
    • 2019-01-29
    • 2021-08-05
    • 1970-01-01
    相关资源
    最近更新 更多