Seurat 简介与安装
单细胞 RNA 测序(scRNA-seq)数据分析这些年火得不行,各种工具层出不穷。但要说生态最成熟、社区最活跃的,Seurat 绝对排第一。我刚开始接触单细胞时,第一反应也是“装个 Seurat 开干”。嗯,这里头有不少门道,如果一开始装错了版本或者漏了依赖,后面会掉进各种坑里。这节课我们先聊清楚 Seurat 是什么、怎么装、版本怎么选,把第一步走稳。
Seurat 的功能定位
Seurat 不是某个单一算法,而是一整套分析框架。从读数据、质控、标准化、降维、聚类到差异表达、可视化,甚至整合多个样本批次效应校正,它全都包了。说白了,你拿到一个标准的 10x 数据之后,90% 的常规分析可以用 Seurat 一条龙搞定。
我个人习惯把 Seurat 视为单细胞分析的“瑞士军刀”。它提供了几个核心模块:
- 数据读写与预处理:支持 10x Genomics、smart-seq、Drop-seq 等多种平台输出格式。
- 质控与过滤:基于基因数、UMI 数、线粒体比例等指标快速筛选细胞。
- 标准化与变量基因选择:内置 LogNormalize、SCTransform 等方法。
- 降维与聚类:PCA、t-SNE、UMAP 高度集成。
- 整合与批次校正:经典的 i 锚定法(FindIntegrationAnchors + IntegrateData)。
- 差异表达与功能注释:FindMarkers、AddModuleScore 等。
| 模块 | 主要函数/方法 | 典型用途 |
|---|---|---|
| 数据输入 | Read10X, CreateSeuratObject | 读取 10x 输出文件 |
| 标准化 | NormalizeData, SCTransform | 消除测序深度差异 |
| 降维 | RunPCA, RunUMAP | 降低数据维度 |
| 聚类 | FindNeighbors, FindClusters | 识别细胞亚群 |
| 整合 | FindIntegrationAnchors, IntegrateData | 多样本批次效应校正 |
如果你经常做整合分析,我建议优先使用 SCTransform 做标准化,它能保留更多生物学变异。我曾遇到过标准归一化后整合效果不佳,换成 SCT 后结果明显改善。
安装方式与依赖关系
Seurat 目前通过 CRAN 和 Bioconductor 分发,最稳定的方式是直接从 CRAN 安装。不过它依赖的底层包很多,像 dplyr、ggplot2、Matrix、Rcpp 这些。如果 R 版本较旧,可能会报依赖不满足的错误。
我个人的标准安装命令是:
install.packages("Seurat")
但这行命令背后会拉下来一大串依赖。我通常还会单独安装一个常用附加包:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("multtest")
BiocManager::install("presto")
如果你需要最新的开发版(比如修复了某个 bug),可以用 GitHub 版本:
install.packages("devtools")
devtools::install_github("satijalab/seurat", ref = "develop")
注意:开发版可能不稳定。有一次我为了一个新功能装了 develop 版,结果某个旧脚本里的整合函数参数变了,折腾了一天才改回来。生产环境建议用 CRAN 版。
依赖关系速览
Seurat 强依赖的包超过 50 个,核心的包括:
- Matrix:稀疏矩阵存储,数据量一大就靠它。
- Rcpp / RcppArmadillo:C++ 底层加速,计算距离和聚类时效率高。
- dplyr / tidyr:数据框操作,后续处理元数据常用。
- ggplot2:可视化基础。
- future.apply:并行计算支持。
- fitdistrplus:SCTransform 中做负二项分布拟合时用到。
下面这张表列出了几个常见场景下的依赖需求:
| 功能 | 所需额外包 | 安装建议 |
|---|---|---|
| 标准分析 | Seurat 自带 | install.packages("Seurat") |
| SCTransform | glmGamPoi (可选) | BiocManager::install("glmGamPoi") |
| 整合分析 | Seurat 自带 | 同上 |
| 并行计算 | future | Seurat 自动加载 |
| 富集分析 | clusterProfiler, enrichR | 单独安装 |
版本选择与 R 版本兼容性
Seurat 版本迭代很快,从 v3 到 v4 再到现在的 v5,每次大版本更新都会改一部分 API 和底层数据结构。我建议选 LTS(长期支持)版本,比如当前 CRAN 上的 5.1.x 系列。如果你用的是 R 4.2 以下,可能需要降级到 Seurat v4。
常见的版本对应关系:
- Seurat v5:支持 R >= 4.2,推荐 4.3 或 4.4。
- Seurat v4:R >= 4.0,兼容 4.1/4.2。
- Seurat v3:R >= 3.6,现在基本不维护了。
💡 我的建议:用 R 4.3.x + Seurat v5.x,这是目前最稳的组合。我曾经因为图省事用旧 R 配新 Seurat,结果编译 Rcpp 包时一直报错,白白浪费一下午。
如果你团队里有人用旧版代码,可以先检查一下 Seurat 版本:
packageVersion("Seurat")
# 返回像 ‘5.1.0’ 这样的版本号
升级前务必先看看 Seurat 官方 NEWS(不开链接,此处仅为描述),里面会把每个版本的变动列清楚,特别是有没有改默认参数。
Seurat 在单细胞分析流程中的位置
下面这张图帮你看清 Seurat 在整个 scRNA-seq 分析流程里扮演的角色:从原始数据进门,到最终输出可发表的结果,它占据了中间 80% 的活儿——但也还是要配合其他工具做初步质控和后期注释。
看完这张图你应该明白:Seurat 不负责最原始的定量(比如 CellRanger 那一步),也不需要你手写合并表格的代码——它把中间最繁琐的分析流程封装成了可复用的漂亮流水线。
避坑指南:安装常见问题
- Rcpp 编译失败:常见于 Windows 系统缺少 Rtools。解决方案:安装匹配 R 版本的 Rtools 并添加到 PATH。我曾因为换了新电脑忘了装 Rtools,直接
install.packages("Seurat")报了一堆红字。 - 依赖包版本冲突:尤其是 dplyr 和 Matrix。建议先升级 R 到最新版,然后用
install.packages("Seurat")一次性安装所有依赖。 - 网络下载超时:中国用户常见。可以设置镜像:
options(repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")。 - 安装后加载报错:比如
Error: package or namespace load failed。检查是否需要重启 R 会话,或重新安装特定冲突包:remove.packages("Seurat")再重装。
注意:绝对不要在 .libPaths() 中有同名包的不同版本,比如 /usr/lib 和 ~/R 目录各有一个旧版 Seurat。我以前吃过这个亏,每次 modifyLSI 函数都找不到参数,排查了半天才发现有两个 Seurat。