Windows系统更新R至3.4版本后丢失包,如何恢复?
找回并迁移Windows系统中R旧版本丢失的包
别慌,这种情况在R版本升级时太常见了——因为每个R版本默认会维护独立的包库目录,升级后新版本不会自动继承旧包。不过咱们还是有办法找回并迁移这些包的,分步骤来:
第一步:定位旧版本R的包存储位置
Windows上R的包通常存在两个地方:
- 用户目录下的库:默认路径是
C:\Users\[你的用户名]\Documents\R\win-library\,里面会按R版本号建文件夹,比如3.2版本的包就在3.2这个文件夹里。 - R安装目录下的系统库:如果当初安装包时选了全局安装,可能在
C:\Program Files\R\R-3.2.x\library(x是具体的小版本号,比如3.2.5)。
如果旧版本R还没卸载,打开它运行 .libPaths() 就能直接看到包的存储路径,更准确。
第二步:导出旧包的完整清单
情况A:旧R还在的话(最省心)
打开旧版本R,运行这两行命令把所有已安装包的名字导出到文本文件:
# 导出旧包清单到当前工作目录的old_packages.txt文件 write.table(installed.packages()[,1], "old_packages.txt", row.names=FALSE, col.names=FALSE)
情况B:旧R已经卸载了
直接找到刚才定位到的旧包文件夹,比如C:\Users\XXX\Documents\R\win-library\3.2:
- 手动把里面的子文件夹名(每个文件夹对应一个包)抄下来;
- 或者更高效:在这个文件夹里按住Shift+右键,选择「在此处打开PowerShell窗口」,运行
Get-ChildItem -Directory | Select-Object -ExpandProperty Name > old_packages.txt,自动生成包名清单。
第三步:批量安装到新版本R
打开R 3.4版本,运行以下命令批量安装旧包:
# 读取旧包清单 packages <- read.table("old_packages.txt", stringsAsFactors=FALSE)[,1] # 批量安装(如果有些包需要指定镜像,先选好镜像再运行) install.packages(packages)
特殊情况处理:找不到的包
如果有些包在CRAN上找不到了(比如已下架、是自定义包或旧版本专属包):
- 试试直接把旧包文件夹复制到新版本R的库目录里(比如
C:\Users\[你的用户名]\Documents\R\win-library\3.4),然后运行library(包名)测试能不能正常加载——如果没问题就可以用,报错的话就得找替代方案。 - 如果是自定义包,或者能找到旧版本的包安装文件(比如.zip格式),可以用
devtools::install_local("path/to/你的包文件.zip")来安装。
后续规避技巧
以后再升级R版本前,推荐用installr包自动处理:
install.packages("installr") library(installr) updateR() # 这个函数会自动迁移旧包到新版本,还能帮你卸载旧R
内容的提问来源于stack exchange,提问作者Spaniel




