SuperAPI AI 工具集

r

数据与分析

查看项目

更新于 10-16 10:56

技能介绍

用途

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