
1. 为什么“更新 R 与 RStudio”值得单独写一篇很多人第一次接触 R是从“装个 R、再装个 RStudio”开始的。装完之后能跑通plot(1:10)就以为万事大吉直到某天想装一个包屏幕上蹦出一行红字package xxx was built under R version 4.x.x或者干脆提示依赖不满足、编译失败。这时候才意识到R 和 RStudio 这两个东西是需要维护、需要更新的。先把概念理清楚避免新手混淆。R 是语言本身和它的运行环境负责计算、统计、绘图所有包的安装、加载、执行都发生在 R 这一层。RStudio 是一个集成开发环境IDE它本身不做统计计算只是把 R 包装成一个更好用的界面代码编辑器、控制台、环境面板、绘图窗口、帮助文档、Git 集成等等。两者是“引擎”和“驾驶舱”的关系。所以更新的时候R 和 RStudio 是两条独立的线各自有各自的更新方式不能混为一谈。那为什么非要更新我总结下来有三个最现实的理由。第一新包对 R 版本有硬性要求。现在 CRAN 上不少包明确要求 R 4.2 甚至更高你版本太老install.packages()直接拒绝。第二性能与稳定性。R 4.x 系列在字符串处理、apply家族、内存管理上都有持续优化老版本跑大数据集会明显更慢。第三RStudio 的新功能。比如对 Quarto 的支持、对 Python 的集成、新的快捷键和调试器都是较新版本才有的。这篇文章面向的是已经装过 R 和 RStudio、但不确定怎么安全升级的人。不管你是 Windows、macOS 还是 Linux我都会把每一步拆开讲清楚包括更新前要备份什么、更新后包怎么办、以及那些官方文档不会告诉你的坑。核心关键词就三个R 语言、RStudio、更新全文围绕它们展开。2. 更新前的准备工作先想清楚三件事2.1 确认当前版本别凭感觉动手之前先知道自己站在哪里。打开 RStudio在控制台里敲R.version.string它会返回类似R version 4.1.2 (2021-11-01)的字符串。RStudio 的版本则在菜单Help About RStudio里看或者用RStudio.Version()记下这两个版本号。为什么要记因为更新是有“跨度”概念的。如果你从 R 4.0 直接跳到 4.4中间跨了好几个大版本某些老包的兼容性风险会明显上升而如果只是 4.3.1 到 4.3.3 这种小版本基本无痛。心里有数后面出问题才好定位。2.2 备份你的包列表和自定义配置这是我最想强调的一步也是最多人忽略的一步。更新 R 之后你原来安装的第三方包不会自动跟过来因为 R 的包是装在版本号对应的目录下的。比如 Windows 上4.1 的包在R/win-library/4.14.4 的包在R/win-library/4.4互不相通。所以更新前务必把当前装过的包名导出成一个清单# 导出已安装的包名 installed - as.data.frame(installed.packages()) write.csv(installed$Package, my_packages.csv, row.names FALSE)或者更简洁地存成一个 R 对象方便以后一键重装pkgs - installed.packages()[, Package] saveRDS(pkgs, my_packages.rds)除了包列表还有几样东西值得备份~/.Rprofile启动时自动执行的配置、~/.Renviron环境变量比如 API key、镜像地址、以及 RStudio 的全局选项Tools Global Options可以截图或记录关键项。这些东西平时不显眼一旦丢了重新配一遍很烦。2.3 决定更新策略原地升级还是全新安装这里有个关键选择。R 的更新在 Windows 和 macOS 上官方推荐的做法其实是卸载旧版、安装新版而不是“覆盖安装”。原因在于 R 的安装目录带版本号覆盖安装容易留下残留文件反而引发诡异问题。Linux 上则通常通过包管理器升级属于原地替换。所以策略上分两种保守派保留旧版本新版本装到另一个目录两个版本共存。好处是万一新版本有问题随时切回去。缺点是磁盘占用翻倍且需要手动管理R_LIBS。激进派直接卸载旧版装新版干净利落。适合对现有环境依赖不深、或者本来就想借机清理包的人。我个人的习惯是大版本跳跃如 4.1 到 4.4时先共存观察一两周确认没问题再删旧版小版本更新直接覆盖式重装。这个策略在下面各平台的操作里都会体现。提示无论哪种策略更新前把正在跑的重要脚本和项目提交到 Git或者至少复制一份。更新过程中断电、误操作导致环境损坏的情况虽然少见但一旦发生没有备份就很被动。3. Windows 平台R 与 RStudio 的完整更新流程3.1 更新 R下载安装包并处理旧版本Windows 上更新 R标准路径是去 CRAN 的 Windows 页面下载最新的R-x.x.x-win.exe。安装向导里会有一步问你是否要保留旧版本这里就是策略落地的地方。如果你选择“不保留”向导会提示你旧版本的包库不会被删除但新版本会用新的库目录。安装完成后第一件事是把旧库里的包“迁移”过来或者干脆重装。迁移的做法是找到旧库路径比如C:/Users/你的用户名/AppData/Local/R/win-library/4.1把里面的文件夹复制到新库路径.../win-library/4.4。但我要提醒一句直接复制包目录有风险因为有些包在安装时会针对特定 R 版本编译跨大版本复制可能加载失败。更稳妥的是重装用前面导出的清单pkgs - readRDS(my_packages.rds) # 过滤掉 base 和推荐包只装第三方包 base_pkgs - rownames(installed.packages(priority c(base, recommended))) to_install - setdiff(pkgs, base_pkgs) install.packages(to_install)这段代码的逻辑是先读出你之前存的包名再排除掉 R 自带的 base 和 recommended 包这些新版 R 已经自带剩下的才是需要重新安装的第三方包。一次性装完比一个个手动点快得多。3.2 更新 RStudio直接覆盖安装即可RStudio 的更新比 R 简单得多。它就是一个普通应用程序去官网下载最新的安装包双击运行它会自动覆盖旧版本你的所有设置、快捷键、主题都会保留。RStudio 的更新不影响 R 的包库两者互不干扰。有一个细节值得注意RStudio 启动时会自动寻找系统里的 R 版本。如果你装了多个 R可以在Tools Global Options General R version里切换。更新完 R 之后如果 RStudio 还指向旧版本就在这里改一下或者重启 RStudio 让它重新探测。3.3 Windows 上的两个高频坑第一个坑是权限问题。如果你把 R 装在C:/Program Files/R/下而包库却在用户目录某些情况下安装包会提示“无法写入”。解决办法是确保包库路径在用户可写目录或者以管理员身份运行一次 RStudio 完成首次配置。第二个坑是中文路径。R 对中文路径的支持一直不算完美尤其是涉及编译的包。如果你的用户名是中文AppData路径里带中文个别包安装会失败。这种情况可以考虑把库路径改到一个纯英文目录通过.Renviron里的R_LIBS_USER指定。4. macOS 与 Linux不同系统的更新姿势4.1 macOSpkg 安装包与 Homebrew 两条路macOS 上更新 R官方提供.pkg安装包下载后双击安装即可。和 Windows 类似新版会装到/Library/Frameworks/R.framework/Versions/下的新版本目录旧版本保留。包库在~/Library/R/下同样按版本分目录。如果你用 Homebrew可以用brew install --cask r来管理更新时brew upgrade --cask r。但要注意Homebrew 装的 R 和官方 pkg 装的 R 路径不同包库位置也可能不一样混用容易混乱。建议选定一种方式不要来回切换。macOS 上还有一个经典问题编译工具链。很多包需要从源码编译依赖 Xcode Command Line Tools 和 gfortran。更新 R 之后如果编译报错先检查xcode-select --install是否装好以及 gfortran 版本是否匹配。R 官方在 CRAN 的 macOS 页面会标注推荐的 gfortran 版本照着装就行。4.2 Linux包管理器与官方源Linux 上更新 R 最省事的方式是用系统包管理器比如 Ubuntu/Debian 下sudo apt update sudo apt install --only-upgrade r-base但系统源里的 R 版本往往偏旧。想要最新版需要添加 CRAN 的官方软件源。以 Ubuntu 为例编辑/etc/apt/sources.list加入对应版本的 CRAN 源然后apt update apt install r-base。这样能拿到较新的版本。Linux 上包库默认在/usr/local/lib/R/site-library或用户目录下更新 R 后同样面临包重装的问题。好在 Linux 上重装包通常比 Windows 快因为编译环境更完整。用前面那段install.packages(to_install)的代码即可批量处理。4.3 跨平台通用的版本管理思路不管你用什么系统有一个思路是通用的把 R 版本和项目需求绑定。比如你有一个老项目依赖某个只在 R 4.1 下能跑的包那就没必要强行升级整个环境。可以用renv这类包来管理项目级的依赖每个项目锁定自己的包版本和全局 R 版本解耦。这样更新全局 R 的时候老项目依然能通过renv恢复到它需要的环境。renv的基本用法是在项目目录里renv::init()初始化它会扫描你用的包并记录版本renv::snapshot()保存当前状态换环境后renv::restore()一键还原。这套机制在团队协作和跨机器迁移时特别有用强烈建议有长期项目的人用起来。5. 更新之后包重装、验证与收尾5.1 批量重装包的实操细节前面给了重装包的代码这里补充几个实操细节。第一装包前先设好镜像国内用户建议用清华或中科大的 CRAN 镜像速度差很多options(repos c(CRAN https://mirrors.tuna.tsinghua.edu.cn/CRAN/))第二分批安装别一次性全塞进去。包多了之后某个包编译失败会中断整批。可以写个循环记录失败的包failed - c() for (p in to_install) { tryCatch( install.packages(p), error function(e) failed - c(failed, p) ) } print(failed)这样即使有包装不上也不影响其他的最后统一处理失败清单。第三Bioconductor 的包要单独处理。生信方向的读者注意Bioconductor 的包不在 CRAN 上需要用BiocManager::install()。更新 R 之后先装新版BiocManager再用它装回生信包。Bioconductor 有版本对应关系比如某个 Bioconductor 版本只支持特定 R 版本升级 R 时要注意匹配。5.2 验证更新是否成功更新完别急着干活先做几项验证。第一确认版本R.version.string RStudio.Version()第二随便加载几个常用包看有没有报错library(dplyr) library(ggplot2)第三跑一个最小可复现的例子比如画个图、读个 CSV确认基本功能正常。第四如果你用 R Markdown 或 Quarto渲染一个最简单的文档确认编译链路没断。这几步花不了几分钟但能提前暴露大部分问题。5.3 清理旧版本与磁盘空间确认新版本稳定后可以清理旧版本释放空间。Windows 上通过控制面板卸载旧 RmacOS 上删除/Library/Frameworks/R.framework/Versions/下的旧目录Linux 上用包管理器清理。旧包库目录也可以一并删除但建议保留至少一个旧版本一到两周万一新环境有隐藏问题还能切回去应急。6. 常见问题与排查速查更新过程中遇到的问题大多集中在包加载失败、编译报错、路径混乱这几类。我把典型问题和处理思路整理成表方便对照排查。问题现象可能原因处理思路加载包提示 built under R version包是为旧 R 编译的重装该包或整体重装包库安装包报编译错误缺少编译工具链Windows 装 RtoolsmacOS 装 Xcode CLT 和 gfortranRStudio 找不到 R版本切换未生效Global Options 里手动指定 R 路径中文路径导致安装失败路径含非 ASCII 字符改库路径到纯英文目录Bioconductor 包装不上版本不匹配用对应版本的 BiocManager更新后 R 启动变慢启动脚本或历史记录过大清理.Rhistory、检查.Rprofile除了表里的还有两个经验性的坑值得说。一是别在更新过程中同时开着多个 R 会话容易造成库文件锁冲突。二是更新 R 后第一次装包建议先装devtools或remotes因为很多包依赖它们来从 GitHub 安装先把这个基础打好后面省事。注意如果你在用 RStudio 的 Projects 功能更新后打开老项目可能会提示包版本不一致。这时候不要盲目点“全部更新”先看清楚是哪些包评估影响再决定。生产项目里包版本突变是引入 bug 的常见原因。7. 我踩过的坑和几条实用建议说几个我自己真实踩过的坑。有一次我在 Windows 上从 R 4.0 升到 4.3图省事直接把旧库目录整个复制到新库结果sf和raster这两个涉及地理编译的包死活加载不了报的错还很隐晦。后来老老实实重装才解决。涉及 C/C 编译的包跨大版本千万别复制一定重装。还有一次在 macOS 上更新 R 之后install.packages()一直卡在编译阶段查了半天发现是 gfortran 版本和 R 不匹配。CRAN 的 macOS 页面其实写得很清楚推荐哪个版本的 gfortran但很多人不看直接装最新的反而出问题。跟着官方推荐走别自作聪明。最后给几条实用建议。第一养成记录包清单的习惯每次装新包后更新一下my_packages.rds更新 R 时直接拿来用。第二镜像一定要设国内不设镜像装包能慢到怀疑人生。第三大版本更新前先在小项目上试水别拿主力工作环境当试验田。第四RStudio 和 R 分开更新先更 R 确认没问题再更 RStudio出问题时好定位是哪一层的锅。这套流程我用了好几年从 Windows 到 macOS 再到 Linux 都验证过基本能覆盖绝大多数更新场景。真正麻烦的从来不是“怎么点下一步”而是更新前后的包管理和环境一致性。把这两块想清楚更新 R 和 RStudio 就是一件十分钟能搞定的日常维护。