第3章:R语言与Bioconductor环境准备

这一章,咱们把"厨房"先搭好。做批次效应校正,说白了就是在R里跑edgeR这个包。要是R环境都没配利索,后面再牛的代码也跑不起来。我见过太多人卡在第一步——装不上包,或者版本冲突,然后跑来问我"为什么我的edgeR报错"。

嗯,咱一步步来,别急。

3.1 底层的R语言版本

先说R本身。Bioconductor的包对R版本有严格要求——每年4月和10月发布正式版,绝大多数时候你装最新的大版本就行。我建议用R ≥ 4.3,因为edgeR的最近几个版本都依赖较新的底层矩阵运算库。

你可以去CRAN官网下载对应系统的安装包。Windows用户直接下载.exe,macOS用户选.pkg,Linux用户可以用包管理器(比如apt install r-base)。装完打开终端敲一下:

R --version

如果看到版本号,说明装好了。我一般习惯在终端里跑R,但写复杂脚本时用RStudio更方便。

个人建议:千万别装那种"OpenR"或"Microsoft R Open"的魔改版本,老老实实从CRAN装官方R。我在项目中遇到过一次客户用Anaconda的R,结果和Bioconductor的依赖树根本对不上,折腾了一整天。

3.2 推荐IDE:RStudio

虽然R自带的GUI也能用,但说实话——不方便。项目管理、代码高亮、绘图预览,这些功能RStudio都帮你包了。尤其是调试边缘情况时,RStudio的断点功能能省你一半时间。

安装很简单:去RStudio官网下载免费开源的RStudio Desktop。注意:要保证RStudio版本和R大版本匹配。比如R 4.3.x要装RStudio 2023.06或更新的版本。

装完后打开RStudio,在Console里输入:

getRversion()

确认版本在4.3以上。我曾经遇到一个同事,R装了4.2,RStudio却装了个旧版,结果某些包编译通不过——你想想看,这种低级坑只要多留意一下就能避免。

3.3 Bioconductor的安装

Bioconductor是专门为生物信息学设计的R包仓库。它有自己的安装函数——BiocManager::install()。你不能直接用install.packages(),因为那些包不在CRAN上。

装BiocManager很简单,在R里跑一行:

install.packages("BiocManager")

然后就能用这个管理器装edgeR了:

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("edgeR")

装好后验证一下:

library(edgeR)
packageVersion("edgeR")

如果没报错,edgeR就装好了。不过这里有个细节——Bioconductor的版本和R版本是一一对应的。比如R 4.3对应Bioconductor 3.18(具体版本号每年更新)。你不需要手动指定版本,BiocManager::install()会自动匹配。

我曾经踩过的坑:在服务器上装了R 4.2,但系统环境里同时还有系统自带的R 3.6,结果BiocManager安装时死活塞到了旧版本的Bioconductor 3.14上,导致edgeR里一些新API(比如modelMatrixMeth)找不到。解决方法很简单——把系统默认R切换到新版,或者用conda建隔离环境。

3.4 其他依赖包

edgeR本身的依赖并不多,但实际分析时往往还需要这几个包:

包名 作用 安装命令
limma 差异表达分析(edgeR常和limma配合) BiocManager::install("limma")
statmod 精确检验所需的统计模型 install.packages("statmod")
ggplot2 绘图(做MDS图、火山图时用) install.packages("ggplot2")
dplyr 数据操纵 install.packages("dplyr")

你可以在一个脚本里批量装:

packages <- c("BiocManager", "edgeR", "limma", "statmod", "ggplot2", "dplyr")
for (pkg in packages) {
    if (!requireNamespace(pkg, quietly = TRUE)) {
        if (pkg %in% installed.packages()[, "Package"]) next
        if (pkg %in% c("edgeR", "limma")) {
            BiocManager::install(pkg)
        } else {
            install.packages(pkg)
        }
    }
}

为啥要这样写?因为有的包来自CRAN,有的来自Bioconductor,它们的安装方式不同。我个人写环境配置脚本时都是直接判断来源,省得记混。

3.5 环境配置的流程总结

做过很多次了,我把流程画成一张图,方便你对照检查:

R & Bioconductor 环境准备流程 安装R (≥4.3) 安装RStudio 配置CRAN镜像 安装BiocManager 安装edgeR + 配套包 验证(library) 建议:安装后运行 sessionInfo() 查看所有包版本,确认无冲突

从上往下看:先装好R,再装RStudio(可选但推荐),同时配置CRAN镜像(国内可以设https://mirrors.tuna.tsinghua.edu.cn/CRAN/,下载速度快很多)。然后装BiocManager,接着装edgeR和它的小伙伴。最后用library()验证一下。这一步做完,你的环境就准备好了。

3.6 一点小补充:Session Info

我每次开始一个新分析,第一行代码总是:

sessionInfo()

为什么?因为以后你要复现分析、或者找别人帮你debug时,这个信息太太太重要了。它能告诉你R版本、操作系统、所有加载的包的版本。我建议你把它保存到日志里:

sink("session_info.txt")
sessionInfo()
sink()

有了这个,别人一看就知道:"哦,你用的是R 4.3.1,edgeR 4.2.0,那没问题。" 省得来回问版本。

核心结论:环境准备只有两步——装R(≥4.3) + 用BiocManager装edgeR。其他都是锦上添花。但锦上添花做不好,后面分析就会绊脚。我建议你现在就去跑一遍上面的代码,确认能成功加载library(edgeR)。