使用 renv 隔离 Seurat 版本的完整指南

——单细胞分析环境管理最佳实践

🎯 写在前面:为什么一定要用 renv?

在单细胞分析中,Seurat 版本不一致几乎必然导致复现失败:

  • Seurat v4 / v5 API 不兼容
  • 依赖包强耦合(SeuratObject、Matrix、future 等)
  • 多项目共用服务器极易相互污染

👉 renv 是目前 R 生态中最可靠的项目级环境隔离方案。


一、renv 的核心思想

环境是“项目级”的,而不是“会话级”的。

  • 每个项目有独立包库:renv/library
  • 版本信息写入:renv.lock
  • 实际包文件可通过全局缓存复用(不重复安装)

二、典型场景:隔离 Seurat v4 / v5

/mnt/8T_Disk2/envs/
├── seurat_v4_project/
│   ├── renv/
│   ├── renv.lock
│   └── scripts/
└── seurat_v5_project/
    ├── renv/
    ├── renv.lock
    └── scripts/

三、创建并初始化 renv 项目

1️⃣ 在项目目录启动 R

cd /mnt/8T_Disk2/seurat_v4_project
R

2️⃣ 初始化 renv

install.packages("renv")
renv::init()

四、安装指定版本的 Seurat

Seurat v4

renv::install("Seurat@4.3.0")
renv::snapshot()

Seurat v5

renv::install("Seurat@5.0.3")
renv::snapshot()

⚠️ 不要使用 install.packages()


五、验证环境

.libPaths()
packageVersion("Seurat")
sessionInfo()

六、是否需要重复安装包?

不需要。

  • renv 使用全局缓存:~/.cache/R/renv
  • 相同版本直接复用
  • renv::restore() 通常秒级完成

七、必须在 renv 目录分析吗?

✅ 规则

必须在 renv 项目目录启动 R,但可以 setwd 到任意数据目录。

library(Seurat)
setwd("/mnt/8T_Disk2/real_data/scRNA")

❌ 常见错误

setwd("renv_project")
# 不会激活 renv

八、renv 自动激活原理

  • 仅在 R 启动时 查找 renv/activate.R
  • 启动后 setwd 不影响环境

九、退出 / 删除环境

临时退出

renv::deactivate()

重新进入

renv::activate()

永久删除

unlink("renv", recursive = TRUE)
unlink("renv.lock")

核心总结

renv 决定“用什么包”,setwd 决定“读写什么数据”。