环境搭建:把坑填平,再跑分析
说实话,RNA-seq 的差异表达分析,最让人头疼的往往不是统计学原理,而是环境搭建。我记得自己第一次搭环境时,光 conda 就重装了三次,R 包冲突到怀疑人生。所以这一章,我把踩过的坑和惯用的套路一并倒出来,希望能帮你省下几天时间。
Linux 基础:够用就行
你不需要成为 Linux 运维专家。我日常做 RNA-seq 分析,其实只用到了十几条命令。核心就三个:目录操作、文件浏览、权限管理。
常见的文件系统结构你得心里有数:/home 放用户数据,/tmp 放临时文件,/opt 放共享软件。我建议在 /home/你的用户名 下建三个文件夹:
mkdir -p ~/rnaseq/{raw_data,results,scripts}
这样后续的比对、定量、差异表达,每个阶段都有地方搁数据,不会乱成一锅粥。
至于常用的命令,我整理了一个速查表,你贴在工位上就行:
| 操作场景 | 命令示例 | 说明 |
|---|---|---|
| 查看文件前几行 | head -n 20 sample.fastq | 快速检查格式 |
| 统计行数 | wc -l *.fq.gz | 估算 reads 数量 |
| 查找文件 | find . -name "*.bam" | 递归搜索 |
| 后台运行 | nohup bash run.sh & | 断开 SSH 也不停 |
| 磁盘用量 | du -sh * | 看哪个文件夹占空间 |
一个小经验:每次运行新命令前,先 which 命令名 看看它到底在哪。我就因为系统自带的旧版 Python 和新装的 conda Python 打架,浪费过半天。
用 conda 和 mamba 管软件:告别依赖噩梦
生物信息学软件的依赖关系,简直就是一团乱麻。你想想看,不同工具对 Python、GCC、Boost 的要求可能完全相反。conda 正好能解决这个——它用隔离环境让每个软件各玩各的。
我个人习惯装 Miniconda3 而不是 Anaconda,因为 Anaconda 预装太多我用不到的包。安装命令很简单:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
安装时注意两个选项:一是同意许可协议,二是问是否初始化 conda,选 yes。装好后关掉终端重新打开,你应该能看到 (base) 字样。
然后我推荐立刻换用 mamba。mamba 是 C++ 写的包管理器,比 conda 快了不止一倍。装法就一行:
conda install -n base -c conda-forge mamba
后续你把所有 conda install 替换成 mamba install,体验会丝滑很多。我在项目 B 里用 mamba 装一个 40 个依赖的大环境,原来 conda 要解 15 分钟,mamba 五分钟就完事了。
配置好国内镜像源
conda 默认的国外源下载速度很慢。我一般配清华的镜像,你要是有更顺手的也可以用其他镜像:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --set show_channel_urls yes
为什么先加这两个就够了?因为 95% 的 RNA-seq 相关包都在 main 和 free 里面。需要 bioconda 时再加:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
实战:创建 RNA-seq 分析环境
我习惯按项目单独建环境,这样不同版本的软件不会打架。下面这个环境包含了比对、定量和差异表达的核心工具:
mamba create -n rnaseq -y \
star=2.7.10a \
samtools=1.17 \
subread=2.0.3 \
fastqc=0.11.9 \
multiqc=1.14
mamba activate rnaseq
装好后验证一下:
STAR --version
samtools --version
featureCounts -v
避坑指南:我曾经在 conda 环境里同时装了不同版本的 Python 包,结果 import 时报错说库不兼容。后来我养成了一个习惯——每次装新环境前,先 conda clean -a 清一下缓存,防止旧索引干扰。
R 和 Bioconductor:差异表达的主战场
差异表达分析最后的统计部分,我基本都是在 R 里完成的。Bioconductor 是专门为高通量组学数据设计的 R 包仓库,里面有 DESeq2、edgeR、limma 这些经典工具。
装 R 语言核心
我建议不要用系统自带的 R,版本太旧。直接用 conda 装:
mamba install -c conda-forge r-base=4.3.1
注意 r-base 是 conda 里的命名方式,和普通的 R 语言是一回事。装完后敲 R --version 确认。
装 Bioconductor 包
Bioconductor 包有好几种装法。我一般用 BiocManager,因为它的依赖解析做得很全。在 R 终端里执行:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install(version = "3.18")
然后装差异表达的核心包:
BiocManager::install(c("DESeq2", "edgeR", "limma", "tximport"))
如果网速慢,可以在 R 里配一下国内镜像:
options(repos = c(CRAN = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
验证一下包是否装好:
library(DESeq2)
library(edgeR)
library(limma)
不报错就说明成了。
个人习惯:我每次新建一个 R 项目,都会在项目根目录放一个 renv.lock 文件,记录用到的所有包版本。这样换一台机器或者让同事复现时,直接 renv::restore() 就对齐了,省掉很多扯皮。
环境搭建整体流程
我把整个搭建路线画了张图,你可以对照着检查自己缺了哪一步:
常见问题与排查套路
环境搭好了,运行时总会出点幺蛾子。我把高频问题整理成清单,你遇到时可以照着找:
| 问题现象 | 常见原因 | 排查命令 |
|---|---|---|
command not found | 软件未装或环境未激活 | conda list | grep 包名 |
| Python 导入报错 | 包版本不对或 Python 版本冲突 | python -c "import 包名; print(包名.__version__)" |
| R 包安装失败 | 缺少系统依赖库 | sudo apt-get install libcurl4-openssl-dev (Ubuntu) |
| conda 环境卡死 | 索引文件损坏或磁盘空间不足 | conda clean -i 或 df -h |
最后一条建议,也是我自己的血泪教训:每次装完新环境,立刻跑一个最小测试。比如装完 DESeq2 后,找个公共数据集跑一遍 DESeqDataSetFromMatrix,确认所有依赖都能正常加载。不要等到正式分析时才发现包没装全,那会儿再临时补装,可能会破坏已有的环境依赖平衡。