在一次更新多个包时解决“无法删除先前安装的包”错误

时间:2018-02-13 18:17:45

标签: r package-management

这是一个反复出现的问题,例如

我多次遇到过这个问题。最令人讨厌的是当它出现在一堆包裹中时;例如我喜欢

update.packages(ask = FALSE)

并获得许多这些错误。但错误是误导,因为R倾向于实际删除旧包版本---但是然后不安装新版本。一旦发生这种情况,您无法使用update.packages进行修复;你必须从头开始重新安装。

此问题最令人沮丧的方面是它经常在安装依赖项时出现,例如我可能会成功更新dplyr,但在此过程中Rcpp已被删除。现在我无法加载dplyr,因为缺少Rcpp,所以我需要重新安装Rcpp

我当前的解决方法(当卸载的软件包数量很大时)将关闭所有R会话,使用基本R GUI(即不是RStudio或RTVS)打开一个新会话并执行

lapply(dir(.libPaths()), install.packages)

重新安装我的整个库。这太过分了。

有没有更好的方法来检查.libPaths()中的哪些文件夹实际包含软件包,以便我只重新安装缺少的软件包?

或者:是否有更好的方法来检查缺少的软件包依赖性?

1 个答案:

答案 0 :(得分:6)

一种策略是

setdiff(dir(.libPaths()), .packages(all = TRUE))

获取库中似乎实际上不包含包的目录列表。现在我有一个小得多的软件包列表要重新安装。

我不确定它是否万无一失,但它比重新安装我的整个库更好。