有时,你遇到了一个问题,在GNU R中Hadley Wickham recommends:
我建议您重新安装所有软件包 .
问题是如何以最好的方式做到这一点 . 我知道install.packages将overwrite existing versions .
当只使用CRAN包时(GitHub或其他来源没什么特别的),这种天真的方法对我有用:
my.packages <- rownames(installed.packages());
install.packages(my.packages);
但是,如果我有installed dev versions from GitHub,或者使用了一些未公开共享的本地软件包,我该怎么办?
我正在寻找的方法是:
-
检查新安装对软件包的更改(升级/降级)
-
从同一来源再次安装包
-
备份我的旧包文件夹
是否有可以满足这些要求的脚本?
2 回答
((1)的部分解决方案 - 找出将升级/降级的软件包)
我认为这只是近似的 - 取决于依赖关系,您可能无法获得所有升级 . 但是如果使用开发版本,你会看到降级的预期吗?
您可以尝试以下方法 .
这里
lib.loc
是您要更新的现有软件包的位置,instlib
是新软件包的位置(在上面的示例代码段中相同) . 如果要更新所有现有软件包(不仅仅是libLoc
中的软件包),而是将所有新更新的软件包放在instlib
位置,请避免传递lib.loc
或将其设置为NULL
. 有关更多信息,请查看update.packages
功能的文档 .当我遇到包装问题时我使用了这个,并且在我拥有有限权限的远程系统上从旧版本升级到R-3.5之后不得不重新安装它们 .
希望这可以帮助 .