第一章 重点解析
SECTION01 / 05
1.0科研范式的演进
Evolution of Scientific Paradigms
研究范式的演进
From Observation to AI-Driven Science
新范式扩展可研究的问题,此前的范式仍在继续使用。
理论、实验与演绎解释
建模、模拟与数值计算
从大规模数据中发现模式
AI 参与假设、工具调用与发现
Adapted from Miolane (2025), The fifth era of science: Artificial scientific intelligence, PLOS Biology. 时间边界与案例为教学示意。
SECTION02 / 05
2.0RStudio 入门
Getting Started with RStudio
RStudio 的四个窗格
The RStudio Interface
源代码编辑器
编写、保存并反复运行代码。脚本把分析步骤固定下来,是可复现结果的基础。
控制台
在 > 提示符后输入代码并回车即执行,结果或报错随即显示;适合快速试算,但不能替代脚本。
环境面板
列出当前全局环境中的对象,例如数据框、向量与函数,用来检查对象是否已生成及其结构。
多功能区
以标签页组织文件、图形、扩展包与帮助,绘图结果默认显示在 Plots 标签页。
打开脚本后,RStudio 显示四个窗格
输入、运行与输出
Input · Run · Output
代码写在 Source(新建的 R Script),按 Ctrl/⌘+Enter 运行,结果去 Console / Plots / Environment 查看。
输入 · Source
在新建的 R Script 里逐行输入代码
运行 · 快捷键
一次选中多行,运行全部
也可点击编辑器上的 Run 按钮,效果相同
输出 · 结果去向
运行后,结果出现在以下窗格
SECTION03 / 05
3.0R 项目管理
Project-oriented Workflows in R
为什么需要项目结构?
Why Project Structure Matters
CASE · 某一典型毕业论文项目
-
01
哪一份才是原始数据?
-
02
最终结果究竟由哪份数据、哪个脚本生成?
-
03
半年以后重新打开,你自己或别人知道该从哪里继续吗?
从文件堆积到项目结构
From Files to a Project
还是前面那份毕业论文,整理之后是这样:
好的项目结构,让“人”一眼看出:数据从哪来、做了什么、结果在哪。
本项目使用 R 整理和分析闵行区人口普查与问卷调查数据,了解不同街镇的人口特征,并分析居民生活满意度的基本差异。
- 原始数据保存在
data/raw/:第七次人口普查上海闵行区.csv、问卷量表.xlsx、数据.sav - 处理后的数据保存在
data/processed/:clean_data.rds
- 依次运行
scripts/01_import.R— 导入数据 scripts/02_clean.R— 清洗和整理scripts/03_analysis.R— 统计分析scripts/04_visualize.R— 生成图表
- 图表:
output/figures/ - 统计结果:
output/tables/ - 最终报告:
report/thesis.docx
- 刘同学 · 更新日期:2026-09-17
养成好习惯
Good Project Habits
← → 左右切换,末页速览
原始数据不要修改
RAW → PROCESSED拿到数据先整份保留,所有修改都存到 processed,原始文件保持原样。
输入、过程、输出分开
INPUT → PROCESS → OUTPUT原始数据、代码、生成结果分开,找起来清楚,也方便别人接手。
文件名要能自解释
ORDER + ACTION + TYPE用序号表达顺序,别用 final / new 这种说不清的词。
使用相对路径
FROM PROJECT ROOT文件彼此「相对定位」,项目整体拷走也不会断链。
写一份 README
PROJECT MAPREADME 不用写得漂亮,把数据、代码、运行顺序、结果位置说清楚就够了。
五个好习惯 · 速览
QUICK RECAP- 01保留原始数据不修改
- 02分开输入、过程与输出
- 03命名文件名自解释
- 04相对从项目根目录出发
- 05说明README 交代项目
规则不复杂,关键是从第一个项目开始保持一致。
创建 R Project
Create an R Project
让 RStudio 创建项目根目录与 .Rproj 入口,从一开始就把分析放进明确的项目边界。
打开 New Project Wizard
可从 File 菜单或右上角 Project 菜单进入。
Create Project
选择 New Directory,让 RStudio 创建新的工作目录。
Project Type
选择列表顶部的 New Project,创建普通分析项目。
Create New Project
上级位置与 Directory name 共同决定项目根文件夹。
从 .Rproj 开始
Open the Project First
项目创建后,今后从 chapter_1.Rproj 进入 RStudio;项目上下文与上次打开的文件通常会一并恢复。
已进入 chapter_1 项目
RStudio 载入项目上下文,并把工作目录定位到项目根文件夹。
上次打开的脚本与文档通常会随项目恢复;如未恢复,再从项目内打开。
chapter_1.Rproj→2 确认右上角显示 chapter_1→3 继续上次工作;必要时再打开文件SECTION04 / 05
4.0R 包与 tidyverse
R Packages and the tidyverse
R 包:像 App 一样扩展 R
Extending R with Packages
Base R 像一部刚出厂的 iPhone,RStudio 是这节课使用的操作界面;需要专业功能时,再从“应用商店”安装相应的 R 包。
R Package Store
不同的包,为不同的分析任务提供专业功能
install.packages("dplyr")
联网从 CRAN 下载,并保存到当前电脑的 R 包库
library(dplyr)
把已经安装的包接入当前会话,随后即可使用其中的函数
对比
Base R vs. janitor
snake_case
Student IDFinal ScoreHome City
目标列名student_idfinal_scorehome_city
1clean_names_base <- function(x) {
2 x <- trimws(x) # 去除首尾空格
3 x <- iconv(x, to = "ASCII//TRANSLIT") # 转写非 ASCII 字符
4 x <- gsub("([a-z0-9])([A-Z])", "\\1_\\2", x) # 拆分 camelCase
5 x <- tolower(x) # 统一为小写
6 x <- gsub("[^a-z0-9]+", "_", x) # 空格与符号改为 _
7 x <- gsub("^_+|_+$", "", x) # 清除首尾 _
8 x[x == ""] <- "x" # 避免空列名
9 make.unique(x, sep = "_") # 处理重复列名
10}
11names(student) <- clean_names_base(names(student))
1student <- janitor::clean_names(student)
student_idfinal_scorehome_city
tidyverse 与管道符
The tidyverse and the Pipe Operator
ggplot2
dplyr
tidyr
readr
purrr
tibble
stringr
forcats
lubridate
library(tidyverse)
1central_districts <- c("黄浦"
, "静安"
, "徐汇"
, "长宁"
)
2result <- arrange( # 4. 排序
3 summarise( # 3. 汇总
4 group_by( # 2. 分组
5 filter(survey, age >= 18, district %in% central_districts), # 1. 筛选
6 district),
7 mean_income = mean(income, na.rm = TRUE)),
8 desc(mean_income))
%>%:按处理顺序向下读6 lines · 线性 4 步
1central_districts <- c("黄浦"
, "静安"
, "徐汇"
, "长宁"
)
2result <- survey %>% # 2,400 条原始记录
3 filter(age >= 18, district %in% central_districts) %>% # 1. 筛选
4 group_by(district) %>% # 2. 分组
5 summarise(mean_income = mean(income, na.rm = TRUE)) %>% # 3. 汇总
6 arrange(desc(mean_income)) # 4. 排序
%>%把左侧结果传给下一函数的第一个参数,代码因此能按照“数据 → 操作 → 结果”的顺序书写。
课程约定:后续示例统一使用 %>%;现代 Base R 的 |> 将在需要时另行比较。
数据如何沿管道逐步完成处理
教学示意:从上海全市调查中筛选四个中心城区的成年样本,按区计算平均收入并降序排列。
%>%%>%%>%%>%SECTION05 / 05
5.0R Markdown
Reproducible Documents with R Markdown
为什么使用 R Markdown?
From Fragmented Writing to Reproducible Research
model <- read_csv("survey.csv"
) %>%
select(hours, score) %>%
lm(score ~ hours, data = .)
分析结果
数据或模型一旦更新,就需要重新导出、替换并逐项核对。
文字、代码与输出共用一个版本
数据变化后重新 Knit 即可同步结果
重新运行即可核对分析步骤与结果
网页可承载动态图表、地图与表格
源文件便于共享、审查与继续扩展
Knit:从源文件到成果
From .Rmd Source to Finished Document
---
2title: "文档标题"
3output: html_document
4---
5
6# 一级标题
7正文内容写在代码块之外。
8
9## 二级标题
10正文中也可以插入行内代码:`r mean(x)`
11
12```{r setup, include=FALSE}
13library(tidyverse)
14```
15
16```{r analysis, cache=TRUE, message=FALSE}
17result <- mean(x, na.rm = TRUE)
18result
19```
20
21### 三级标题
22- 列表项与补充说明
23
24```{r figure, fig.width=6, fig.height=4}
25plot(x, y)
26```
27...
编织
源文件尚未生成输出
R Markdown 的基本结构
Core Structure of an R Markdown Document
---
2title: "分析报告"
3author: "课程示例"
4output:
5 html_document:
6 toc: true
7 number_sections: true
8---
```{r setup, include=FALSE}
11library(tidyverse)
12knitr::opts_chunk$set(echo = TRUE)
13```
18
---
## 二级标题
22下面先报告数据规模,再查看变量摘要。
当前数据共有 `r nrow(cars)` 条观测。
```{r summary, cache=TRUE, message=FALSE}
27summary(cars)
28```
### 三级标题
31- 列表项可以整理关键发现
32- 也可以补充方法与数据来源
Markdown 语法:输入与呈现
Markdown Source · Rendered Output
# 一级标题
## 二级标题
### 三级标题
**核心结论**
*补充说明*
`mean(x)`
- 数据
- 方法
1. 清理
2. 建模
[课程主页](https://example.org)

> 结果需要结合语境解释。
这是一个新的段落。
---
| 变量 | 均值 |
|:-----|-----:|
| 年龄 | 32.4 |
| 收入 | 8.6 |
代码块:创建、命名与参数
Create and Configure an R Code Chunk
```{r cars_plot}
2
3# 绘制车速与停车距离
4plot(
5 cars$speed, cars$dist,
6 xlab = "车速"
, ylab = "停车距离"
,
7 pch = 19
8)
9
10```
Thanks
第二周:第一章 重点解析