# 第 05 章 环境搭建与工具链

> 本章属于“Track B：数据基础”。请在第 03 章了解了数据来源之后，先把分析环境搭好，再进入第 06 章的数据获取。

## 本章目标

学完本章，你将能够：

1. 在自己的 Windows 电脑上安装 R 和 RStudio；
2. 用 `install.packages()` 与 `BiocManager::install()` 安装教程所需的全部 R 包；
3. 认识本教程核心 R 包各自的用途；
4. 用 RStudio Project 组织“脚本 / 数据 / 结果 / 图”的项目目录；
5. 用 `sessionInfo()` 记录分析环境，保证结果可复现。

## 5.1 需要装什么：R 与 RStudio

本教程的分析用 **R 语言**完成，配套使用 **RStudio**（一个更友好的 R 开发界面）。推荐安装 **R 4.x**（如 4.3.x、4.4.x，以官网当前稳定版为准）。

**为什么用 R？** 因为生信挖掘——尤其是 GEO 数据下载、差异表达、富集分析、生存分析——的主流工具链是 R：GEOquery、limma、clusterProfiler、survival 等包在 R 生态里最成熟，论文方法学也几乎都用 R 描述。Python 在深度学习、单细胞分析领域更强，但本教程用不到，属于“可选装”：学有余力再装，不影响后续任何章节。

> 提示：如果电脑上装过旧版 R（如 3.x），建议先卸载再装新版，避免包版本混乱。

## 5.2 一步一步安装（Windows 为例）

**第 1 步：安装 R。**

1. 打开 R 官方下载站 https://cran.r-project.org ，点击 "Download R for Windows" → "install R for the first time"；
2. 下载安装包，双击运行，一路“下一步”（Next），全部用默认选项即可。默认安装到 `C:\Program Files\R\R-4.x.x`，不用修改；
3. 装完后开始菜单会出现 R 的快捷方式（本教程不直接使用它，我们使用 RStudio）。

**第 2 步：安装 RStudio。**

1. 打开 https://posit.co/download/rstudio-desktop/ ，下载 Windows 版安装包；
2. 双击运行，同样一路默认安装；
3. 打开 RStudio：它会自动找到电脑上已装的 R。RStudio 界面分为四个窗格：左上脚本编辑区、左下控制台（Console）、右上环境（Environment）、右下文件 / 图 / 帮助。

**验证安装**：在 RStudio 左下角 Console（控制台）输入：

```r
R.version.string
```

回车后能看到类似 `R version 4.4.x (2025-xx-xx)` 的输出，即安装成功。

**装完常见问题**：如果打开 RStudio 提示找不到 R，多半是 R 未安装或安装不完整，重装 R 后重启 RStudio 即可；如果 RStudio 界面是英文，不影响使用（Tools → Global Options 里可改语言，也可不改）。

## 5.3 包管理：安装本教程需要的全部 R 包

R 的“包”（package）是别人写好的函数集合。装包有两条命令：

```r
# 从 CRAN（R 官方包仓库）安装
install.packages("ggplot2")

# 从 Bioconductor（生物信息学包仓库）安装
# 第一步：先安装包管理器 BiocManager
install.packages("BiocManager")
# 第二步：用 BiocManager 安装 Bioconductor 的包
BiocManager::install("GEOquery")
```

**一次性装齐本教程的核心包**（把下面整段复制进 Console，回车执行；首次安装可能需要几分钟到几十分钟，请耐心等待，不要中途关闭）：

```r
# 1. 包管理器
install.packages("BiocManager")

# 2. Bioconductor 包
BiocManager::install(c("GEOquery", "limma", "clusterProfiler",
                       "org.Hs.eg.db", "survival", "survminer"))

# 3. CRAN 包
install.packages(c("glmnet", "pheatmap", "ggplot2", "timeROC", "survivalROC"))
```

> 提示：Windows 上装包需要联网。个别包在编译时需要 RTools（https://cran.r-project.org/bin/windows/Rtools/ 下载安装即可），但绝大多数包都有预编译的 Windows 二进制版本，不需要 RTools。

> 装包失败先看报错：最常见的是网络问题（可换国内镜像源，如 `install.packages("ggplot2", repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")`）或包名拼写错误。

**核心包用途表**（本教程会逐章用到，先混个脸熟）：

| R 包 | 用途 | 主要出现在 |
| --- | --- | --- |
| GEOquery | 下载并读取 GEO 数据（GSE 系列矩阵） | 第 06 章 |
| limma | 差异表达分析（differential expression analysis, DEA） | 第 07 章 |
| clusterProfiler | GO/KEGG 富集分析、GSEA | 第 09 章 |
| org.Hs.eg.db | 人类基因 ID 注释与转换 | 第 07/09 章 |
| survival | KM 生存曲线、Cox 回归 | 第 11 章 |
| survminer | 生存分析绘图（ggsurvplot） | 第 11 章 |
| glmnet | LASSO 回归，构建预后风险模型 | 第 11 章 |
| pheatmap | 表达热图 | 第 08 章 |
| ggplot2 | 通用绘图（火山图等） | 第 08 章 |
| timeROC / survivalROC | 时间依赖 ROC 曲线（评估模型） | 第 11/12 章 |

使用某个包前要先“加载”：`library(包名)`。如果 `library` 报错“没有这个包”，多半是没装成功，重新执行对应的安装命令即可。

补充一个小知识：`library(包名)` 用于加载包，使其中函数可以直接调用；而 `BiocManager::install(...)` 这种“包名::函数”的写法表示“调用某包里的某函数”，不先加载也能用。教程中两种写法都会出现。

## 5.4 工作目录与项目组织

**工作目录（working directory）** 是 R 读写文件的默认文件夹。可以用 `setwd()` 手动设置：

```r
# Windows 路径示例：注意用正斜杠 / 或双反斜杠 \\
setwd("D:/projects/hcc_pyroptosis")
getwd()   # 查看当前工作目录
```

> 新手最常见的坑：文件明明在桌面上，R 却找不到——多半是工作目录不对。**强烈建议用 RStudio Project 代替手动 setwd**，一劳永逸。

**建立 RStudio Project**：File → New Project → New Directory → New Project，填写项目名（如 `hcc_pyroptosis`），选择存放位置（如 `D:/projects/`），创建后 RStudio 会自动把工作目录设为项目根目录，下次打开项目时也会自动恢复。

**相对路径**：使用 RStudio Project 后，脚本里的 `data/raw/...` 这类路径就是“相对于项目根目录”的路径，换电脑也能用；而 `C:/Users/xxx/Desktop/...` 这类绝对路径换电脑就要改。本教程一律采用相对路径。

**项目内文件夹组织**（本教程统一约定，第 06 章会详细说明 data 目录）：

```
hcc_pyroptosis/
├── data/        # 原始数据（下载后只读，不手动改动）
├── scripts/     # R 脚本（01_download.R、02_dea.R ……）
├── results/     # 分析结果（表格、模型输出）
├── figures/     # 图片
└── README.md    # 项目说明与数据登记（见第 06 章）
```

## 5.5 环境一致性：sessionInfo() 与 renv

生信分析讲究“可复现”（reproducible）：半年后别人（或你自己）重跑脚本，结果应当一致。但 R 包会不断更新，版本不同结果可能不同。这里给出两个由浅入深的办法：

1. **记录 sessionInfo()**（必须做到）：`sessionInfo()` 会把 R 版本、所有已加载包及其版本完整打印出来。把它保存到 results 目录，作为本次分析的环境快照：

```r
writeLines(capture.output(sessionInfo()), "results/sessionInfo.txt")
```

2. **用 renv 锁定环境**（进阶，了解即可）：`renv::init()` 初始化，`renv::snapshot()` 把当前所有包的精确版本记录到项目里，之后在别的电脑上 `renv::restore()` 可以一键恢复相同版本。适合需要长期维护的项目。

对新手来说，做到第 1 条（记录 sessionInfo）就已经比大多数教程的要求更严谨了。

**什么时候用 renv？** 项目需要长期维护、多人协作，或投稿前想严格复现时再用 renv；日常练习做到 sessionInfo 记录就足够了。

## 本章小结

- 装 R 4.x + RStudio，Windows 一路默认安装即可；
- 装包两条命令：`install.packages()`（CRAN）与 `BiocManager::install()`（Bioconductor）；
- 本教程核心包：GEOquery、limma、clusterProfiler、org.Hs.eg.db、survival、survminer、glmnet、pheatmap、ggplot2、timeROC/survivalROC；
- 用 RStudio Project 组织项目，data / scripts / results / figures 分文件夹存放；
- 分析完成后用 `sessionInfo()` 记录环境，进阶可用 renv 锁定包版本。

## 思考题

1. 为什么本教程选择 R 而不是 Python 作为主分析语言？Python 在什么场景下更合适？
2. `install.packages()` 和 `BiocManager::install()` 有什么区别？为什么 Bioconductor 的包一般不能用第一种命令安装？
3. 在 Console 中运行 `setwd("C:/Users/你的用户名/Desktop")` 后，`getwd()` 会返回什么？为什么教程推荐用 RStudio Project 而不是 setwd？
4. 动手实践：在你自己的电脑上完成 R 与 RStudio 的安装，并成功运行 `library(ggplot2)`。
