用途
R 是一种用于统计计算与图形绘制的语言和环境。该技能面向需要 R 语言协助的场景,涵盖统计分析与计量经济学、出版级数据可视化、Tidyverse 数据整理、交互式仪表盘与报告等方向。
主要能力
- 统计分析与计量经济学:假设检验、回归建模、生存分析以及统计研究。
- 出版级数据可视化(ggplot2):创建高保真、出版质量的统计图表与图形。
- Tidyverse 数据整理:使用 dplyr、tidyr 和管道(|>)转换与聚合复杂数据集。
- 交互式仪表盘与报告(Shiny / Quarto):发布动态 Web 仪表盘和可复现的科学文档。
- 大数据快速处理(data.table):对多 GB 级数据集进行高速列式内存处理。
使用方式
快速入门示例:
print("Hello, World!")
# Vector
x <- c(1, 2, 3, 4, 5)
mean(x)
# Data Frame
df <- data.frame(
Name = c("Alice", "Bob"),
Age = c(25, 30)
)
图形语法(ggplot2)
通过叠加数据、美学映射、几何对象和分面来组合统计可视化:
library(ggplot2)
ggplot(mpg, aes(x = displ, y = hwy, color = class)) +
geom_point(size = 3, alpha = 0.8) +
geom_smooth(method = "lm", se = FALSE) +
labs(
title = "Engine Displacement vs Highway Fuel Economy",
x = "Displacement (Liters)",
y = "Highway MPG"
) +
theme_minimal()
使用 dplyr 与原生管道(|>)进行整洁数据转换
library(dplyr)
summary_stats <- starwars |>
filter(!is.na(height), !is.na(mass)) |>
group_by(species) |>
summarise(
count = n(),
avg_height = mean(height),
median_mass = median(mass)
) |>
filter(count >= 2) |>
arrange(desc(avg_height))
使用 data.table 进行快速列式内存处理
library(data.table)
dt <- data.table(iris)
dt[Species == "setosa", .(Avg_Petal_Length = mean(Petal.Length)), by = Species]
常见模式
Tidyverse 数据转换管道
问题:分析过程中产生多个中间数据框副本,占用内存。
解决:使用 dplyr 管道操作符(%>% 或 |>)进行流式处理:
library(dplyr)
summary_stats <- mtcars %>%
filter(mpg > 15) %>%
group_by(cyl) %>%
summarise(
mean_mpg = mean(mpg),
mean_hp = mean(hp),
count = n()
) %>%
arrange(desc(mean_mpg))
print(summary_stats)
最佳实践
建议:
- 使用原生管道(|>):统一使用 R 4.1+ 原生管道(|>),替代旧式 magrittr(%>%)。
- 使用 renv 实现可复现环境:在 renv.lock 中锁定精确的包版本,确保研究可复现。
- 大数据采用 data.table 或 arrow:避免在数百万行数据集上出现内存溢出崩溃。
- 使用 Quarto 发布:用现代 Quarto(.qmd)编写可复现报告、幻灯片和网站。
避免:
- 使用 attach():attach() 会污染搜索命名空间,导致隐蔽的变量屏蔽 bug。
- 在迭代循环中增长数组:应预先分配向量大小,或使用向量化函数(lapply、purrr::map)。
- 使用 1:length(x):若 x 为空,1:0 会创建无效的 2 元素向量;应改用 seq_along(x)。
故障排查
| 错误 | 原因 | 解决方案 |
|---|---|---|
| Error in ... : could not find function "%>%" | 使用了管道操作符但未加载 magrittr 或 dplyr。 | 添加 library(dplyr),或改用 R 4.1+ 原生管道 |>。 |
| cannot allocate vector of size ... (Out of memory) | 数据集超出可用内存。 | 使用 data.table,或用 arrow 包进行分块分析。 |
| object '...' not found | 变量在声明前被求值,或列名拼写错误。 | 核对拼写,并用 ls() 检查当前环境中的对象。 |
参考
- R Project
- R for Data Science