
1. 为什么要认真对待 R 与 RStudio 的版本更新很多人装完 R 和 RStudio 之后就再也没动过版本号直到某天想装一个包报错信息里赫然写着“package ‘xxx’ was built under R version 4.x.x”或者 Bioconductor 的某个生信包死活装不上才想起来该更新了。我自己就踩过这个坑有一次跑单细胞转录组分析需要用到某个依赖 R 4.3 以上版本的注释包结果本地还是 R 4.1折腾了一下午才发现问题出在版本太旧。R 语言和 RStudio 是两个独立维护的软件。R 是底层解释器负责实际的计算和包管理RStudio 是集成开发环境负责代码编辑、调试、绘图预览、项目管理这些交互层面的东西。两者更新节奏不同更新方式也完全不一样。R 大概每半年发一个大版本比如 4.3.x 到 4.4.x中间会有若干小版本修 bugRStudio 现在叫 Posit更新频率更高几乎每个月都有新版本功能迭代和界面调整都比较频繁。这篇文章面向所有使用 R 做数据分析的人不管你是刚入门的新手还是已经用了一段时间但一直没更新过的老用户。我会把 Windows、macOS、Linux 三个平台上的更新方法都讲清楚重点解释为什么某些操作要那样做以及更新过程中最容易出问题的地方在哪里。尤其是包迁移这个环节很多人更新完 R 之后发现之前装的包全没了又得一个个重装其实有更省事的办法。注意更新 R 之前务必确认你当前项目里没有正在运行的重要计算任务。更新过程中 R 会重启未保存的工作空间会丢失。2. 更新前的准备工作别急着动手2.1 先搞清楚你现在的版本状态在终端或者 RStudio 的控制台里输入R.version.string这会告诉你当前 R 的版本号比如 “R version 4.3.2 (2023-10-31)”。RStudio 的版本可以在菜单栏 Help About RStudio 里看到或者直接在控制台运行RStudio.Version()知道当前版本之后去 CRANComprehensive R Archive Network看一下最新版本是多少。CRAN 是 R 的官方包仓库所有正式发布的 R 版本都会在这里更新。打开浏览器访问 CRAN 官网首页就会显示当前最新版本号。2.2 记录你已安装的包列表这一步是很多人忽略的关键操作。更新 R 之后之前安装的第三方包不会自动迁移到新版本里。如果你不提前记录更新完就得凭记忆一个个重装非常痛苦。# 把所有已安装的包名写入文件 installed_packages - rownames(installed.packages()) write.csv(installed_packages, my_packages.csv, row.names FALSE)这个文件会保存在你当前的工作目录下。建议把它放到一个固定的位置比如桌面或者文档文件夹方便更新完之后找到。如果你用的是 renv 或者 pak 这类包管理工具那恭喜你包迁移会简单很多后面我会专门讲。2.3 备份重要的工作空间和脚本虽然 R 的更新本身不会动你的脚本文件但养成备份习惯总没错。特别是.RData文件工作空间镜像和.Rhistory命令历史如果你依赖这些文件恢复工作状态最好复制一份到安全位置。另外如果你在 RStudio 里配置了很多自定义设置比如主题、快捷键、代码片段这些配置存在~/.config/rstudio/Linux/macOS或者%APPDATA%\RStudio\Windows目录下。RStudio 更新一般会保留这些配置但跨大版本更新时偶尔会重置提前备份一下更稳妥。3. Windows 平台更新实操3.1 更新 R用 installr 包一键搞定Windows 上更新 R 有一个非常方便的工具包叫installr它可以自动完成下载、安装、包迁移的全过程。前提是你当前版本的 R 还能正常运行。# 安装 installr 包 install.packages(installr) # 加载并执行更新 library(installr) updateR()执行updateR()之后会弹出一系列交互式对话框大致流程是检查 CRAN 上的最新版本告诉你当前版本和最新版本分别是多少询问是否要下载最新版安装程序下载完成后自动启动安装向导安装完成后询问是否要把旧版本的包复制到新版本目录下询问是否要更新包建议选“是”但如果你包很多这一步会比较慢询问是否要保留旧版本的 R我的建议是包复制选“是”包更新选“否”先复制过来之后按需更新旧版本保留选“是”万一新版本有问题还能回退。整个流程走完R 就更新好了。注意installr在复制包的时候是把旧版本 library 目录下的文件夹直接拷贝到新版本的 library 目录。如果某个包在旧版本下编译过复制过来之后可能需要重新编译才能在新版本下正常工作。所以复制完成后最好运行一下update.packages(checkBuilt TRUE)来重新编译那些需要更新的包。3.2 手动更新 R 的备选方案如果installr因为网络原因或者权限问题跑不起来也可以手动操作去 CRAN 官网下载 Windows 版的 R 安装程序.exe 文件双击运行安装路径选择一个新目录比如C:\Program Files\R\R-4.4.0不要覆盖旧版本安装完成后打开新版本的 R手动安装你需要的包手动方式的好处是可控性强坏处是包迁移得自己来。你可以用之前保存的my_packages.csv文件批量安装# 读取包列表 pkg_list - read.csv(my_packages.csv)$x # 批量安装跳过已安装的 new_pkgs - pkg_list[!(pkg_list %in% installed.packages()[, Package])] install.packages(new_pkgs)3.3 更新 RStudioRStudio 的更新在 Windows 上非常简单。打开 RStudio点击菜单栏 Help Check for Updates。如果有新版本它会提示你下载。下载完成后关闭 RStudio运行安装程序一路下一步就行。RStudio 的安装程序会自动覆盖旧版本你的配置和项目文件都不会受影响。如果你习惯手动下载去 Posit 官网的 RStudio 下载页面选择对应的 Windows 版本即可。注意区分 “RStudio Desktop” 和 “RStudio Server”个人电脑上用的是 Desktop 版。4. macOS 平台更新实操4.1 更新 Rpkg 安装包直接覆盖macOS 上更新 R 最直接的方式是去 CRAN 下载最新的.pkg安装包。根据你的芯片类型选择对应版本Intel 芯片选 x86_64 版本Apple SiliconM1/M2/M3选 arm64 版本。下载后双击安装它会自动覆盖旧版本。覆盖安装的好处是R 的框架目录/Library/Frameworks/R.framework/会被更新但你的个人库目录~/Library/R/不受影响。不过要注意R 的大版本更新比如 4.3 到 4.4会改变个人库的路径因为路径里包含版本号。比如R 4.3 的包路径~/Library/R/4.3/library/R 4.4 的包路径~/Library/R/4.4/library/所以更新完 R 之后之前装的包在新版本里是找不到的。解决办法是把旧版本的包目录复制到新版本目录下# 在终端中执行 cp -R ~/Library/R/4.3/library/* ~/Library/R/4.4/library/复制完成后同样建议运行update.packages(checkBuilt TRUE)重新编译那些需要更新的包。4.2 用 Homebrew 管理 R 版本如果你用 Homebrew 管理 macOS 上的软件更新 R 就是一条命令的事brew update brew upgrade rHomebrew 会自动处理版本切换和路径更新。但 Homebrew 安装的 R 和 CRAN 官方 pkg 安装的 R 在路径上有些差异包库的位置也不一样。如果你之前用的是 CRAN 版本切换到 Homebrew 版本后需要重新配置包路径或者干脆统一用一种方式安装避免混乱。4.3 更新 RStudiomacOS 上更新 RStudio 有两种方式。一种是打开 RStudioHelp Check for Updates它会引导你下载最新的.dmg文件。另一种是直接去 Posit 官网下载.dmg打开后将 RStudio 图标拖入 Applications 文件夹系统会提示是否替换旧版本选择替换即可。macOS 上 RStudio 的配置文件存在~/.config/rstudio/和~/Library/Application Support/RStudio/两个位置。更新时这些配置会保留但如果你遇到更新后设置丢失的情况可以从备份中恢复。5. Linux 平台更新实操5.1 Ubuntu/Debian 系通过 CRAN 源更新Linux 上更新 R 最规范的方式是配置 CRAN 的 apt 源。以 Ubuntu 22.04 为例# 添加 CRAN 的 GPG 密钥 sudo apt install --no-install-recommends software-properties-common dirmngr wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | sudo tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc # 添加 CRAN 源 sudo add-apt-repository deb https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/ # 更新并升级 R sudo apt update sudo apt install r-base r-base-dev这样安装的 R 会随着apt upgrade自动更新。包库路径通常是/usr/local/lib/R/site-library/和/usr/lib/R/site-library/大版本更新时这些路径不变所以包不需要迁移。但如果你是用install.packages()安装到个人库~/R/x86_64-pc-linux-gnu-library/4.3/那大版本更新后还是需要复制或重装。5.2 从源码编译安装最新版有时候 CRAN 的 apt 源更新不够及时或者你需要某个特定版本可以从源码编译# 下载源码 wget https://cran.r-project.org/src/base/R-4/R-4.4.0.tar.gz # 解压 tar -xzf R-4.4.0.tar.gz cd R-4.4.0 # 配置、编译、安装 ./configure --enable-R-shlib --with-blas --with-lapack make -j$(nproc) sudo make install编译安装的好处是你可以自定义编译选项比如开启多线程 BLAS、指定安装路径等。坏处是每次更新都要重新编译比较耗时。而且编译过程中如果缺少系统依赖比如libreadline-dev、libcurl4-openssl-dev会报错中断需要提前装好。5.3 更新 RStudioLinux 上 RStudio 的更新取决于你当初是怎么安装的。如果是用.deb包安装的去 Posit 官网下载最新的.deb然后sudo dpkg -i rstudio-2024.04.0-735-amd64.deb如果是用.rpm包Fedora/RHEL/CentOS下载对应的.rpm文件后sudo rpm -Uvh rstudio-2024.04.0-735-x86_64.rpmLinux 上 RStudio 的配置文件在~/.config/rstudio/和~/.local/share/rstudio/更新时会保留。6. 包迁移的进阶方案renv 与 pak6.1 用 renv 锁定项目依赖前面讲的包迁移方法都是“全局级别”的也就是把你所有装的包都复制过去。但实际工作中不同项目依赖的包版本可能不一样全局复制容易造成版本冲突。renv这个包就是为解决这个问题设计的。# 在项目目录中初始化 renv install.packages(renv) renv::init() # 这会在项目目录下创建一个 renv/ 文件夹和一个 renv.lock 文件 # renv.lock 记录了当前项目所有包的精确版本更新 R 之后在新版本中打开这个项目运行renv::restore()renv会根据renv.lock文件自动安装所有依赖包而且版本完全一致。这样你就不用担心更新 R 之后项目跑不起来了。我现在的习惯是每个重要项目都配一个renv.lock换电脑、换 R 版本都能一键恢复环境。6.2 用 pak 加速包安装pak是一个相对较新的包管理工具最大的优势是安装速度快而且能自动处理系统依赖。更新 R 之后如果你需要重装大量包用pak会比install.packages()快很多# 安装 pak install.packages(pak) # 批量安装包 pak::pkg_install(c(tidyverse, data.table, ggplot2, sf))pak支持并行下载和安装而且会缓存已经下载过的包第二次安装同样的包时几乎瞬间完成。对于经常需要重装环境的人来说这个工具能省不少时间。7. 常见问题与排查技巧7.1 更新后包加载报错怎么办最常见的报错是 “there is no package called ‘xxx’”这说明包没有迁移过来。解决办法就是重新安装install.packages(xxx)如果报错是 “package ‘xxx’ was built before R 4.4.0: please re-install it”说明包虽然复制过来了但是用旧版本 R 编译的需要重新编译update.packages(checkBuilt TRUE, ask FALSE)如果某个包死活装不上先检查系统依赖是否齐全。比如sf包在 Linux 上需要libgdal-dev、libgeos-dev、libproj-dev在 macOS 上需要gdal、geos、proj。这些系统依赖不装好R 包编译必然失败。7.2 RStudio 更新后无法启动这种情况通常是因为配置文件损坏或者版本不兼容。可以尝试重命名配置目录让 RStudio 以全新状态启动# Linux/macOS mv ~/.config/rstudio ~/.config/rstudio_backup# Windows (PowerShell) Rename-Item $env:APPDATA\RStudio RStudio_backup如果重命名后能正常启动说明是配置问题可以从备份中逐步恢复需要的设置。如果还是不行可能是安装文件损坏卸载后重新下载安装。7.3 更新 R 后中文乱码Windows 上比较常见。R 4.2 之后默认使用 UTF-8 编码但如果你之前的脚本是用 GBK 保存的更新后打开可能会乱码。解决办法是用 RStudio 的 “Reopen with Encoding” 功能选择 GBK 重新打开然后另存为 UTF-8。另外Windows 上绘图时中文字体也可能出问题。可以在脚本开头设置windowsFonts(A windowsFont(Microsoft YaHei)) par(family A)macOS 上一般不会有这个问题因为系统默认就是 UTF-8。7.4 常见问题速查表问题现象可能原因解决方法包加载报错 “no package called”包未迁移重新安装或从旧库复制包加载报错 “built before R x.x.x”包需重新编译update.packages(checkBuiltTRUE)RStudio 启动崩溃配置损坏重命名配置目录后重启中文乱码编码不一致用 GBK 重新打开后另存为 UTF-8包安装失败系统依赖缺失安装对应的系统库gdal、geos 等更新后找不到旧包库路径变化检查.libPaths()输出8. 我个人的更新节奏与经验体会说实话我不建议每次 R 出新版本就立刻更新。大版本刚发布的前几周很多第三方包还没跟上尤其是 Bioconductor 上的生信包通常要等一两个月才会适配新版本。如果你正在做重要分析贸然更新可能导致环境崩掉项目跑不起来。我的做法是等新版本发布后观察一个月左右确认常用包都适配了再更新。更新之前一定先跑一遍renv::snapshot()把当前环境锁住万一新版本有问题随时可以回退。RStudio 的更新可以积极一些因为它主要是 IDE 层面的改进不涉及底层计算环境更新风险小很多。还有一点如果你在团队里工作更新 R 版本之前最好跟同事同步一下。大家用的版本不一致共享脚本和 Rmd 文件时容易出现兼容性问题。我们团队现在的做法是统一用 renv 管理项目环境每个人本地的 R 版本可以不同但项目依赖的包版本完全一致这样既保证了可复现性又不会互相干扰。