开篇:这门课到底能干什么?
大家好,欢迎来到《R Shiny 构建交互差异表达报告实操》的第一章。先说说我自己的经历。
几年前我还在做测序数据分析的时候,每次跑完差异表达,都要手动整理 Excel 表格,然后在 Word 里贴图、写说明。一份报告改个三五版是常事。最头疼的是——合作实验室的老师发来一句「能不能只显示 P 值小于 0.01 的基因?」。好嘛,重新跑一遍流程,重新出图,又是一下午。
那时候我就在想:要是有一份报告,能让对方自己点两下鼠标就完成筛选、切换、导出,该多省事。后来我遇到 R Shiny,才发现这东西简直是为生物信息学量身定做的。说白了,就是把你写的 R 脚本包装成一个网页应用,让别人也能用。
这门课的目标很简单:带你从零开始,构建一个能用的交互差异表达报告。不需要你提前懂 Web 开发,不需要你写过 HTML。只要你用过 R 做过差异表达,就能跟上。
学习目标:学完了你能干什么?
这一套课走下来,我希望你能做到三件事:
- 看懂 Shiny 的骨架 —— 知道 ui 和 server 是怎么配合的。
- 把静态分析变成交互工具 —— 让用户自己选阈值、切数据集、看图表。
- 能部署给别人用 —— 不会只在你自己的电脑上跑得转。
嗯,听起来有点多。别担心,我们每个点都会拆开讲,配合实际的代码和案例。
课程安排:30 章我们都聊什么?
整个课程分成五个模块,节奏是从浅到深:
| 模块 | 章节 | 核心内容 |
|---|---|---|
| 基础篇 | 1-4 章 | Shiny 架构、UI 布局、响应式编程 |
| 数据篇 | 5-10 章 | 数据导入、预处理、差异表达结果结构 |
| 可视化篇 | 11-18 章 | 火山图、热图、MA 图的自定义与交互 |
| 交互篇 | 19-25 章 | 筛选器、表格联动、下载报告 |
| 实战部署 | 26-30 章 | 性能优化、shinyapps.io 部署、Docker 打包 |
Shiny 在生物信息学中的应用:为什么值得学?
你可能会问:Shiny 到底能用在哪些地方?我自己总结了三类最常见的场景。
第一类:交互式数据探索。
传统分析流程是「分析 → 出图 → 看结果 → 再分析」。Shiny 把这个循环变成了实时的。用户可以直接在网页上调节参数,图会跟着变。你想想看,这在探索性数据分析(EDA)阶段有多方便。
第二类:报告自动化。
不只是差异表达。我见过有人用 Shiny 做单细胞聚类结果的交互报告,还有人做药物筛选的剂量-反应曲线工具。Shiny 的好处是:你写一次,别人就能重复用。
第三类:团队协作。
生物信息学团队里往往有多个方向的同事:有人做比对、有人做注释、有人做统计。Shiny 可以把这些模块整合到一个界面上,每个人负责自己的那部分,最后拼成一个完整的报告工具。
我们的第一个 Shiny 应用长什么样?
不多说理论了,先让 Shiny 跑起来。你安装好 shiny 包后,试试下面这段代码:
library(shiny)
ui <- fluidPage(
titlePanel("Hello Shiny"),
sidebarLayout(
sidebarPanel(
sliderInput("bins", "Number of bins:", 1, 50, 30)
),
mainPanel(
plotOutput("distPlot")
)
)
)
server <- function(input, output) {
output$distPlot <- renderPlot({
x <- faithful[, 2]
bins <- seq(min(x), max(x), length.out = input$bins + 1)
hist(x, breaks = bins, col = 'steelblue', border = 'white')
})
}
shinyApp(ui = ui, server = server)
这段代码做了什么?ui 定义了页面上有什么(标题、滑动条、图表区域),server 定义了当用户滑动条变化时,图表怎么更新。你可以在 RStudio 里直接运行,会在浏览器里弹出一个页面。
fluidPage()—— 响应式页面容器。sidebarLayout()—— 左侧输入、右侧输出的经典布局。sliderInput()—— 一个可交互的输入控件。plotOutput()和renderPlot()—— 输出与渲染的配对。
我的第一个 Shiny 应用就是照着这个模子改出来的。当时我把 histogram 换成了火山图,把滑动条换成了 P 值阈值筛选条。虽然现在看来很简陋,但那是我第一次感受到「用户能自己控制分析结果」的爽感。
后面课程里,我们会把这个雏形一步步扩展成真正的差异表达报告工具。
本章知识体系总览
为了让你对第一章的全貌有个直观印象,我画了一张图。它概括了我们要了解的四个层次:课程定位(为什么学)、课程结构(学什么)、Shiny 核心概念(怎么学)、以及最终产出(学到什么程度)。
你看,这门课不是一上来就让你写复杂界面。先从定位和结构入手,再亲手跑通一个最简单的例子。之后每章都围绕一个具体的功能点展开,一步步把报告工具搭起来。
好啦,第一章就到这里。内容不多,但这两件事我希望你带走:Shiny 是为了让分析结果可以被交互式使用而生的;我们的最终目标是一份可部署的差异表达报告工具。