代码
install.packages("tinytex")
tinytex::install_tinytex()本讲将介绍如何使用R Markdown创建动态、可重复的研究报告:
预计时长:45分钟理论 + 15分钟演示
Markdown是John Gruber于2004年创建的轻量级标记语言,设计目标是:
“Readability is the primary design goal”
| 语法 | 效果 |
|---|---|
# 标题 |
一级标题 |
## 标题 |
二级标题 |
**粗体** |
粗体 |
*斜体* |
斜体 |
`代码` |
代码 |
[链接](url) |
链接 |
 |
图片 |
- 列表 |
无序列表 |
1. 列表 |
有序列表 |
R Markdown = R代码 + Markdown文本 → 动态报告
工作流程:
.Rmd 文件
↓
knitr (执行代码)
↓
.md 文件
↓
pandoc (转换)
↓
HTML / PDF / Word
---
title: "报告标题"
author: "作者"
date: "2025-02-27"
output: html_document
---
# 第一章
正文内容...
::: {.cell}
```{.r .cell-code}
# R代码
summary(cars)
```
::: {.cell-output .cell-output-stdout}
```
speed dist
Min. : 4.0 Min. : 2.00
1st Qu.:12.0 1st Qu.: 26.00
Median :15.0 Median : 36.00
Mean :15.4 Mean : 42.98
3rd Qu.:19.0 3rd Qu.: 56.00
Max. :25.0 Max. :120.00
```
:::
:::
## 1.1 小节
更多内容...---
title: "研究标题"
subtitle: "副标题"
author:
- name: "王诗翔"
affiliation: "中南大学"
- name: "合作者"
affiliation: "其他单位"
date: "2026-02-28"
output:
html_document:
toc: true # 目录
toc_float: true # 浮动目录
code_folding: show # 代码折叠
number_sections: true # 章节编号
theme: cerulean # 主题
highlight: tango # 代码高亮
pdf_document:
toc: true
latex_engine: xelatex
---| 选项 | 说明 | 常用值 |
|---|---|---|
echo |
显示代码 | true/false |
eval |
执行代码 | true/false |
output |
显示结果 | true/false |
fig-width |
图宽 | 数字(英寸) |
fig-height |
图高 | 数字(英寸) |
fig-cap |
图标题 | 字符串 |
warning |
显示警告 | true/false |
message |
显示消息 | true/false |
显示代码和结果(默认):
只显示结果:
显示代码,不执行:
隐藏警告:
显示代码,不执行:
隐藏警告:
使用 `r 和 ` 包裹R代码:
示例代码(缩进4空格表示代码块):
分析显示,TP53基因在肿瘤组的平均表达量为 `r round(mean(tp53_tumor), 2)`, 显著高于正常组(p = `r format(p_value, digits=2, scientific=TRUE)`)。
基础表格:
交互式表格(HTML):
```{r}
# 筛选差异表达基因
de_genes <- de_results[
abs(de_results$log2FoldChange) > params$fc_threshold &
de_results$pvalue < params$pvalue_threshold,
]
cat("癌症类型:", params$cancer_type, "\n")
cat("目标基因:", params$gene_of_interest, "\n")
cat("差异表达基因数:", nrow(de_genes), "\n")
```
```{r}
#| eval: params$show_volcano
# 条件显示火山图
plot_volcano(de_results, params$fc_threshold, params$pvalue_threshold)
```需要安装LaTeX:
使用 knitr::read_chunk() 引用外部代码文件:
| 概念 | 要点 |
|---|---|
| .Rmd结构 | YAML + Markdown + 代码块 |
| 代码块选项 | 控制代码显示与执行 |
| 内联代码 | 实现动态更新 |
| 参数化 | 一份模板,多份报告 |
| 多格式 | HTML/PDF/Word一键生成 |
下节预告:Quarto —— 下一代科学出版工具
---
title: "第3讲:R Markdown基础"
subtitle: "创建可重复性研究报告"
---
## 本讲概述
本讲将介绍如何使用R Markdown创建动态、可重复的研究报告:
- Markdown基础语法
- R Markdown文档结构
- 代码块与输出控制
- 图表与表格
- 参数化报告
**预计时长**:45分钟理论 + 15分钟演示
---
## 1. Markdown基础
### 1.1 什么是Markdown?
Markdown是John Gruber于2004年创建的**轻量级标记语言**,设计目标是:
> "Readability is the primary design goal"
### 1.2 基础语法速查
| 语法 | 效果 |
|------|------|
| `# 标题` | 一级标题 |
| `## 标题` | 二级标题 |
| `**粗体**` | **粗体** |
| `*斜体*` | *斜体* |
| `` `代码` `` | `代码` |
| `[链接](url)` | [链接](url) |
| `` | 图片 |
| `- 列表` | 无序列表 |
| `1. 列表` | 有序列表 |
### 1.3 扩展语法
```markdown
| 表格 | 列2 |
|------|-----|
| 内容 | 内容 |
> 引用文字
---
分割线
~~删除线~~
```
### 1.4 LaTeX公式
```markdown
行内公式: $E = mc^2$
独立公式:
$$
\bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i
$$
```
---
## 2. R Markdown入门
### 2.1 什么是R Markdown?
R Markdown = R代码 + Markdown文本 → 动态报告
**工作流程**:
```
.Rmd 文件
↓
knitr (执行代码)
↓
.md 文件
↓
pandoc (转换)
↓
HTML / PDF / Word
```
### 2.2 文档结构
````markdown
---
title: "报告标题"
author: "作者"
date: "2025-02-27"
output: html_document
---
# 第一章
正文内容...
```{r}
# R代码
summary(cars)
```
## 1.1 小节
更多内容...
````
### 2.3 YAML元数据
```yaml
---
title: "研究标题"
subtitle: "副标题"
author:
- name: "王诗翔"
affiliation: "中南大学"
- name: "合作者"
affiliation: "其他单位"
date: "`r Sys.Date()`"
output:
html_document:
toc: true # 目录
toc_float: true # 浮动目录
code_folding: show # 代码折叠
number_sections: true # 章节编号
theme: cerulean # 主题
highlight: tango # 代码高亮
pdf_document:
toc: true
latex_engine: xelatex
---
```
---
## 3. 代码块
### 3.1 基本语法
````markdown
```{r}
#| label: chunk-name
#| echo: true
#| eval: true
# R代码
x <- 1:10
mean(x)
```
````
### 3.2 常用选项
| 选项 | 说明 | 常用值 |
|------|------|--------|
| `echo` | 显示代码 | `true/false` |
| `eval` | 执行代码 | `true/false` |
| `output` | 显示结果 | `true/false` |
| `fig-width` | 图宽 | 数字(英寸) |
| `fig-height` | 图高 | 数字(英寸) |
| `fig-cap` | 图标题 | 字符串 |
| `warning` | 显示警告 | `true/false` |
| `message` | 显示消息 | `true/false` |
### 3.3 代码块示例
**显示代码和结果(默认)**:
````markdown
```{r}
head(mtcars, 3)
```
````
**只显示结果**:
````markdown
```{r}
#| echo: false
summary(cars)
```
````
**显示代码,不执行**:
````markdown
```{r}
#| eval: false
# 耗时计算
heavy_computation()
```
````
**隐藏警告**:
````markdown
```{r}
#| warning: false
library(tidyverse) # 抑制加载警告
```
`````
**显示代码,不执行**:
````markdown
```{r}
#| eval: false
# 耗时计算
heavy_computation()
```
````
**隐藏警告**:
````markdown
```{r}
#| warning: false
library(tidyverse) # 抑制加载警告
```
````
---
## 4. 内联代码
### 4.1 语法
使用 `` `r `` 和 `` ` `` 包裹R代码:
```markdown
数据集包含 `r nrow(mtcars)` 个观测值,
平均油耗为 `r mean(mtcars$mpg)` mpg。
```
### 4.2 应用场景
- 自动更新样本量
- 动态插入统计结果
- 确保正文与表格数据一致
示例代码(缩进4空格表示代码块):
分析显示,TP53基因在肿瘤组的平均表达量为
`r round(mean(tp53_tumor), 2)`,
显著高于正常组(p = `r format(p_value, digits=2, scientific=TRUE)`)。
---
## 5. 图表与表格
### 5.1 基础图形
````markdown
```{r}
#| fig-width: 8
#| fig-height: 6
#| fig-cap: "基因表达散点图"
plot(tp53_expr, p53_protein,
main = "TP53 mRNA与蛋白表达相关性",
xlab = "TP53 mRNA表达量",
ylab = "p53蛋白水平",
pch = 19, col = "steelblue")
```
````
### 5.2 ggplot2图形
````markdown
```{r}
#| fig-cap: "差异表达基因火山图"
library(ggplot2)
ggplot(de_results, aes(x = log2FoldChange, y = -log10(pvalue))) +
geom_point(aes(color = abs(log2FoldChange) > 1 & pvalue < 0.05)) +
theme_minimal() +
labs(title = "差异表达基因火山图",
x = "log2 Fold Change",
y = "-log10(p-value)")
```
````
### 5.3 表格
**基础表格**:
````markdown
```{r}
knitr::kable(
head(gene_expr_summary, 5),
caption = "基因表达统计摘要(前5个基因)",
align = c('l', 'c', 'c', 'c')
)
```
````
**交互式表格(HTML)**:
````markdown
```{r}
DT::datatable(de_results, options = list(pageLength = 10))
```
````
---
## 6. 参数化报告
### 6.1 定义参数
```yaml
---
params:
cancer_type: "BRCA"
gene_of_interest: "TP53"
fc_threshold: 2
pvalue_threshold: 0.05
show_volcano: true
---
```
### 6.2 使用参数
````markdown
```{r}
# 筛选差异表达基因
de_genes <- de_results[
abs(de_results$log2FoldChange) > params$fc_threshold &
de_results$pvalue < params$pvalue_threshold,
]
cat("癌症类型:", params$cancer_type, "\n")
cat("目标基因:", params$gene_of_interest, "\n")
cat("差异表达基因数:", nrow(de_genes), "\n")
```
```{r}
#| eval: params$show_volcano
# 条件显示火山图
plot_volcano(de_results, params$fc_threshold, params$pvalue_threshold)
```
````
### 6.3 应用场景
- 批量生成各癌症类型的分析报告
- 不同参数敏感性分析
- 多中心研究的分中心报告
---
## 7. 输出格式
### 7.1 HTML文档
```yaml
output:
html_document:
toc: true
toc_float: true
code_folding: show
theme: cerulean # default, bootstrap, cerulean, journal...
highlight: tango # default, tango, pygments, kate...
```
### 7.2 PDF文档
```yaml
output:
pdf_document:
toc: true
number_sections: true
latex_engine: xelatex # 支持中文
template: null # 可自定义模板
```
需要安装LaTeX:
```{r, eval=FALSE}
install.packages("tinytex")
tinytex::install_tinytex()
```
### 7.3 Word文档
```yaml
output:
word_document:
toc: true
reference_docx: template.docx # 自定义样式
```
---
## 8. 高级技巧
### 8.1 代码重用
使用 `knitr::read_chunk()` 引用外部代码文件:
````markdown
```{r}
#| include: false
knitr::read_chunk('analysis.R')
```
```{r}
#| label: analysis-setup
# 这里会插入 analysis.R 中标记为 ## ----analysis-setup 的代码
```
````
### 8.2 条件输出
````markdown
```{r}
#| include: knitr::is_html_output()
# 仅在HTML输出时包含
DT::datatable(de_results)
```
```{r}
#| include: knitr::is_latex_output()
# 仅在PDF输出时包含
knitr::kable(head(de_results, 20))
```
````
### 8.3 参考文献
```yaml
---
bibliography: references.bib
csl: nature.csl # 引用样式
---
详见Smith等人的研究 [@smith2020]。
# 参考文献
```
---
## 关键要点
| 概念 | 要点 |
|------|------|
| .Rmd结构 | YAML + Markdown + 代码块 |
| 代码块选项 | 控制代码显示与执行 |
| 内联代码 | 实现动态更新 |
| 参数化 | 一份模板,多份报告 |
| 多格式 | HTML/PDF/Word一键生成 |
---
## 课堂演示
1. 创建新R Markdown文档
2. 配置YAML元数据
3. 添加代码块并设置选项
4. 插入图表和表格
5. Knit生成HTML和PDF
---
## 课后作业
1. 阅读 [R Markdown Cookbook](https://bookdown.org/yihui/rmarkdown-cookbook/)
2. 完成实验手册练习2
3. 准备自己的第一份R Markdown报告(基因表达分析报告)
---
**下节预告**:Quarto —— 下一代科学出版工具
---
## 联系信息
- 授课教师:王诗翔 副教授
- 单位:中南大学 · 生物信息学 专业
- 实验室主页:https://wanglabcsu.github.io/
- 邮箱:wangshx@csu.edu.cn
- GitHub:https://github.com/WangLabCSU