R 语言速查表
最后更新
Hello World 与赋值
R 惯用的赋值运算符是 <-(= 运算符也可以用)。
| 操作 | 语法 |
|---|---|
| 输出一个值 | print("Hello, World!") |
| 自动输出(控制台) | "Hello, World!" |
| 拼接并输出 | cat("Hi", name, "\n") |
| 赋值(惯用写法) | x <- 5 |
| 赋值(同样有效) | x = 5 |
| 向右赋值 | 5 -> x |
| 注释 | # this is a comment |
| 运行脚本 | Rscript app.R |
数据类型与向量
向量是 R 最基本的数据结构,即使是单个值,也是长度为 1 的向量。
| 操作 | 语法 |
|---|---|
| 数值向量 | v <- c(1, 2, 3) |
| 字符向量 | s <- c("a", "b") |
| 逻辑向量 | b <- c(TRUE, FALSE) |
| 整数序列 | 1:10 |
| 带步长的序列 | seq(0, 1, by = 0.1) |
| 重复值 | rep(0, times = 5) |
| 基本类型 | numeric, character, logical, integer, complex |
| 检查或转换类型 | class(x), as.numeric("42") |
向量运算
运算是向量化的,会逐元素执行;索引从 1 开始。
| 操作 | 语法 |
|---|---|
| 访问元素(从 1 开始) | v[1] |
| 切取一段范围 | v[2:4] |
| 逻辑筛选 | v[v > 2] |
| 去掉一个元素 | v[-1] |
| 逐元素运算 | v * 2, v1 + v2 |
| 长度 | length(v) |
| 常用汇总函数 | sum(v), mean(v), max(v) |
| 排序、反转 | sort(v), rev(v) |
| 命名向量 | c(a = 1, b = 2) |
数据框
数据框是由列组成的表,每一列都是等长的向量。
| 操作 | 语法 |
|---|---|
| 创建数据框 | df <- data.frame(name = c("Ada"), age = c(30)) |
| 开头和末尾几行 | head(df), tail(df) |
| 维度 | nrow(df), ncol(df), dim(df) |
| 列名 | names(df), colnames(df) |
| 选择一列 | df$age 或 df[["age"]] |
| 选择行或列 | df[1, ], df[, "age"] |
| 筛选行 | df[df$age > 18, ] |
| 添加一列 | df$adult <- df$age >= 18 |
| 统计摘要 | summary(df) |
| 查看结构 | str(df) |
因子与列表
因子用来存放分类数据,列表可以容纳不同类型的元素。
| 操作 | 语法 |
|---|---|
| 创建因子 | f <- factor(c("low", "high")) |
| 因子水平 | levels(f) |
| 有序因子 | factor(x, ordered = TRUE) |
| 按水平计数 | table(f) |
| 创建列表 | l <- list(name = "Ada", scores = c(1, 2)) |
| 按名称访问 | l$name 或 l[["name"]] |
| 按位置访问 | l[[1]] |
| 子列表(仍是列表) | l[1] |
| 长度、名称 | length(l), names(l) |
流程控制
条件写在圆括号里,代码块写在花括号里。
| 操作 | 语法 |
|---|---|
| if、else if、else | if (x > 0) { ... } else if (x < 0) { ... } else { ... } |
| 向量化的 if-else | ifelse(v > 0, "pos", "neg") |
| for 循环 | for (i in 1:10) { ... } |
| 遍历向量的 for 循环 | for (x in v) { ... } |
| while 循环 | while (x < 100) { ... } |
| repeat 配合 break | repeat { if (done) break } |
| switch | switch(key, a = 1, b = 2) |
| 逻辑运算符 | &&, ||, !(标量);&, |(向量) |
函数
函数是一等公民,最后一个被求值的表达式就是返回值。
| 操作 | 语法 |
|---|---|
| 定义函数 | add <- function(a, b) { a + b } |
| 显式返回 | return(a + b) |
| 默认参数 | greet <- function(name = "World") { ... } |
| 可变参数 | f <- function(...) { sum(...) } |
| 按名称传参 | box(w = 2, h = 3) |
| 匿名函数 | function(x) x * 2 |
| 匿名函数(简写) | \(x) x * 2 |
| 传给高阶函数 | sapply(1:3, function(x) x^2) |
apply 函数族
不用写显式循环,就能把函数应用到数据上。
| 函数 | 作用 |
|---|---|
apply(m, 1, sum) | 按矩阵的行(1)或列(2)应用函数 |
sapply(v, f) | 对向量逐项应用,结果简化为向量或矩阵 |
lapply(v, f) | 对向量逐项应用,总是返回列表 |
vapply(v, f, numeric(1)) | 类似 sapply,但会检查返回类型 |
mapply(f, a, b) | 同时对多个向量逐项应用 |
tapply(x, group, mean) | 按组应用函数 |
Map(f, a, b) | 多变量版的 apply,返回列表 |
Reduce(+, v) | 用二元函数把向量归约成一个值 |
常用数据处理与统计函数
用于汇总和整理数据的常用基础函数。
| 函数 | 作用 |
|---|---|
mean(v) / median(v) | 平均值、中位数 |
sd(v) / var(v) | 标准差、方差 |
min(v) / max(v) / range(v) | 最小值、最大值、两者都要 |
quantile(v) | 分位数(例如四分位数) |
table(x) | 统计每个值出现的次数 |
unique(v) / duplicated(v) | 去重后的值、是否重复的标记 |
is.na(v) / na.omit(df) | 查找或删除缺失值 |
aggregate(y ~ g, df, mean) | 按组 g 汇总 y |
order(v) | 排序用的索引顺序 |
cor(x, y) | 两个向量之间的相关系数 |
最常用的 R 语法,全都在这一页。这份 R 语言速查表是核心语言的快速参考:赋值和数据类型、向量和向量运算、数据框、因子和列表、流程控制、函数,以及 R 数据分析中随处可见的 apply 函数族。
这里的内容都是基础 R(base R),装好 R 就能运行,不需要额外的包。需要什么就复制什么,也可以在 R 在线编辑器里直接运行每个代码片段,无需任何配置。
R 语言速查表常见问题
这份 R 语言速查表免费吗?
免费。这份 R 语言速查表完全免费,无需注册。把它加入书签,需要查向量运算、数据框方法或统计函数时随时回来看。
R 的向量真的从 1 开始索引吗?
v[1] 返回第一个元素,v[length(v)] 返回最后一个元素。负数索引有特殊含义:v[-1] 表示去掉第一个元素,而不是从末尾倒数。向量、列表和数据框都遵循这种从 1 开始的规则。R 语言中的数据框是什么?
df[rows, columns] 索引,用 df$name 选择一列,用 str(df) 或 summary(df) 查看内容。可以在线练习 R 语言吗?
可以。打开 R 在线编辑器,就能在浏览器里运行这份速查表中的任意代码片段,不用安装 R 或 RStudio。想系统学习时,Coddy 的免费交互式 R 课程会一步步带你从向量和数据框学到 apply 函数族和统计分析。
这份速查表适合初学者吗?
适合。内容从最常用的主题(赋值、向量、数据框)一直排到进阶主题(apply 函数族和统计函数),第一天就能用上前面几部分,再慢慢掌握后面的内容。