2. 环境搭建:R与Python双环境配置、Seurat、Harmony、fastMNN等工具安装

好,我们正式开始动手。

环境搭建这件事,说白了就是给你的电脑装上「翻译器」和「工具箱」。单细胞数据从原始的FASTQ文件到最终的可视化图谱,中间要经过好几层处理。R和Python各有各的强项,我个人的习惯是两条腿走路——哪个工具顺手就用哪个,千万别把自己绑死在一门语言上。

嗯,下面我就把双环境配置的要点,以及几个核心工具(Seurat、Harmony、fastMNN)的安装步骤拆开来讲。你跟着走一遍,基本不会踩坑。

2.1 R环境配置与Seurat安装

先说R。R在单细胞下游分析里几乎是标配,尤其是Seurat这个包,它把归一化、降维、聚类、可视化全串在一起了,生态非常成熟。我记得第一次用Seurat做整合的时候,被它的FindIntegrationAnchors函数惊艳到了——几万个细胞,十来个样本,四十分钟搞定。

安装之前,先确认你的R版本在4.0以上。我用的是4.2.2,兼容性最好。

小贴士: 个人建议直接用Microsoft R Open或者Posit(原RStudio)自带的R,别折腾编译。Windows用户尤其注意,有些包需要Rtools,提前装好能省很多事。
# 安装Seurat及其核心依赖(直接在RStudio控制台运行)
install.packages('Seurat')
# 如果网速慢,可以换国内镜像
install.packages('Seurat', repos = 'https://mirrors.tuna.tsinghua.edu.cn/CRAN/')

安装完以后,一定要做一步验证。

# 验证安装
library(Seurat)
packageVersion('Seurat')  # 我目前用的是5.0.1

如果没报错,说明环境已经就绪。

2.2 Harmony:批次校正的「轻骑兵」

Harmony是个很有意思的工具。它不是替代Seurat的整合,而是嵌入到Seurat的流程中,专门用来做批次校正。它的核心思想是用软聚类对齐细胞群,而不是硬生生地把数据拉伸到同一个空间。

为什么说它轻量?因为它不需要额外的标准化,直接用PCA降维后的低维嵌入做校正。我在处理一个8个样本的PBMC数据集时试过,Harmony跑完,UMAP上不同批次的细胞混得非常自然。

# 安装Harmony(通过BiocManager)
if (!requireNamespace('BiocManager', quietly = TRUE))
    install.packages('BiocManager')
BiocManager::install('harmony')
一点提醒: Harmony的输入要求是经过PCA的Seurat对象,千万别把原始count矩阵丢进去。我见过有同事踩过这个坑,跑出来全是噪声。

2.3 fastMNN:Python阵营的整合利器

如果你更习惯用Python,那fastMNN是必装的。它是基于Mutual Nearest Neighbors(MNN)的变体,专门为大规模数据做了优化。我记得做骨髓单细胞图谱时,12个样本、6万多个细胞,用fastMNN+Symphony的组合,二十分钟就完成了整合。

fastMNN是scran包的一部分,虽然是R包,但在Python里可以通过reticulate或者直接调用mnnpy来使用。不过,我建议直接在R里用,因为它的原生接口更稳定。

# 安装scran(包含fastMNN)
BiocManager::install('scran')
# 或者只装batchelor(专门做整合)
BiocManager::install('batchelor')

在Python里,如果你想用纯Python的MNN实现,可以装mnnpy。

# Python环境安装
pip install mnnpy
避坑指南: fastMNN对数据规模比较敏感。如果你的样本数少于3个,或者每个样本的细胞数少于200个,效果会打折扣。曾经我手上只有2个样本的时候硬跑fastMNN,结果校正过度,把真实的生物差异也抹掉了。

2.4 双环境配置与协同工作流

下面这张图展示了R和Python在单细胞分析中的分工。我把它们拎出来,你一看就明白什么时候该用什么。

双环境协同工作流 原始数据 (RAW) R 环境 Seurat | Harmony | fastMNN Python 环境 Scanpy | mnnpy | Scanorama 整合与可视分析 UMAP + 聚类 + 差异分析 批次校正结果 说明:R和Python可以独立走完整流程,也可以交叉调用(比如在R里用reticulate调用Python的扫描器)

2.5 快速安装与版本验证清单

下面这张表是我总结的快速安装清单。你照着走,不出意外十分钟就能搞定。

工具 安装命令 验证命令 我的常用版本
Seurat install.packages('Seurat') packageVersion('Seurat') 5.0.1
Harmony BiocManager::install('harmony') library(harmony); packageVersion('harmony') 1.2.0
batchelor(fastMNN) BiocManager::install('batchelor') library(batchelor); packageVersion('batchelor') 1.18.0
mnnpy(Python) pip install mnnpy import mnnpy; mnnpy.__version__ 0.1.5
关于依赖冲突: 如果你在Python里同时装了scanpy、mnnpy、scipy这些包,建议用虚拟环境隔离。我个人习惯用conda create -n scrna python=3.9建一个干净的环境,再装包。这样即使以后要升级某个包,也不会影响其他项目。

2.6 环境验证:跑一个最简单的流程

装完以后别急着高兴,跑一个最简单的Seurat流程验证一下。我从官方教程里摘了一段最精简的代码,你复制粘贴就能跑。

# 环境验证脚本(R)
library(Seurat)
library(harmony)

# 创建一个假数据对象(3个基因,100个细胞)
counts <- matrix(rpois(300, 10), nrow = 3, ncol = 100)
rownames(counts) <- c('CD3D', 'CD14', 'CD19')
colnames(counts) <- paste0('cell_', 1:100)

so <- CreateSeuratObject(counts = counts)
so <- NormalizeData(so)
so <- FindVariableFeatures(so)
so <- ScaleData(so)
so <- RunPCA(so)

# 跑Harmony校正
so <- RunHarmony(so, group.by.vars = 'orig.ident')

# 如果没报错,说明环境搭建成功
print('环境验证通过,Seurat + Harmony正常运行!')

这段脚本如果能顺利跑完,证明你的R、Seurat、Harmony都装对了。如果卡住了,大概率是某个依赖包没装全,用install.packages('Seurat', dependencies = TRUE)重装一遍就好。

我的一个教训: 曾经在Windows上装Harmony时,报了一个no function found: Cpp11的错。原因是Rtools没装或者版本不对。后来我直接换到了Posit Cloud上跑,省去了本地环境折腾的麻烦。如果你的机器配置不高,或者不想花时间调环境,直接用云RStudio也是个不错的选择。

好,环境到这里就搭好了。后面的章节,我们会拿真实的数据集来测一测这些工具的批次校正效果。你准备好就行。