You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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上找不到了(比如已下架、是自定义包或旧版本专属包):

  1. 试试直接把旧包文件夹复制到新版本R的库目录里(比如C:\Users\[你的用户名]\Documents\R\win-library\3.4),然后运行 library(包名) 测试能不能正常加载——如果没问题就可以用,报错的话就得找替代方案。
  2. 如果是自定义包,或者能找到旧版本的包安装文件(比如.zip格式),可以用devtools::install_local("path/to/你的包文件.zip")来安装。

后续规避技巧

以后再升级R版本前,推荐用installr包自动处理:

install.packages("installr")
library(installr)
updateR()  # 这个函数会自动迁移旧包到新版本,还能帮你卸载旧R

内容的提问来源于stack exchange,提问作者Spaniel

火山引擎 最新活动