R语言特殊运算符 #
一、特殊运算符概述 #
R语言提供了一些特殊的运算符,用于特定的操作场景。
二、成员运算符 (%in%) #
2.1 基本用法 #
r
3 %in% c(1, 2, 3, 4, 5)
6 %in% c(1, 2, 3, 4, 5)
"a" %in% c("a", "b", "c")
"d" %in% c("a", "b", "c")
2.2 向量匹配 #
r
x <- c(1, 3, 5, 7)
y <- c(1, 2, 3, 4, 5)
x %in% y
y %in% x
2.3 数据框筛选 #
r
df <- data.frame(
name = c("张三", "李四", "王五"),
city = c("北京", "上海", "广州")
)
target_cities <- c("北京", "广州")
df[df$city %in% target_cities, ]
2.4 与 ! 组合 #
r
x <- c(1, 2, 3, 4, 5)
y <- c(1, 2)
!(x %in% y)
x[!(x %in% y)]
三、矩阵乘法运算符 (%*%) #
3.1 向量内积 #
r
x <- c(1, 2, 3)
y <- c(4, 5, 6)
x %*% y
sum(x * y)
3.2 矩阵乘法 #
r
A <- matrix(1:6, nrow = 2, ncol = 3)
B <- matrix(1:6, nrow = 3, ncol = 2)
A %*% B
3.3 矩阵与向量 #
r
A <- matrix(1:6, nrow = 2, ncol = 3)
x <- c(1, 2, 3)
A %*% x
3.4 向量外积 #
r
x <- c(1, 2, 3)
y <- c(4, 5)
x %o% y
outer(x, y)
四、整除运算符 (%/%) #
4.1 基本用法 #
r
10 %/% 3
7 %/% 2
100 %/% 10
4.2 向量运算 #
r
x <- c(10, 15, 20, 25, 30)
x %/% 3
4.3 负数整除 #
r
-10 %/% 3
10 %/% -3
-10 %/% -3
五、取余运算符 (%%) #
5.1 基本用法 #
r
10 %% 3
7 %% 2
100 %% 7
5.2 判断奇偶 #
r
x <- 1:10
x %% 2 == 0
x[x %% 2 == 0]
5.3 循环索引 #
r
for (i in 1:10) {
index <- (i - 1) %% 3 + 1
cat("i =", i, ", index =", index, "\n")
}
六、Kronecker积 (%x%) #
6.1 基本用法 #
r
A <- matrix(1:4, nrow = 2)
B <- matrix(c(1, 0, 0, 1), nrow = 2)
A %x% B
kronecker(A, B)
6.2 向量Kronecker积 #
r
x <- c(1, 2)
y <- c(3, 4)
x %x% y
七、自定义运算符 #
7.1 创建自定义运算符 #
r
`%p%` <- function(a, b) paste(a, b)
"Hello" %p% "World"
"a" %p% "b" %p% "c"
7.2 实用示例 #
r
`%+%` <- function(a, b) {
if (is.character(a) && is.character(b)) {
paste0(a, b)
} else {
a + b
}
}
"Hello" %+% "World"
10 %+% 20
7.3 范围运算符 #
r
`%between%` <- function(x, range) {
x >= range[1] & x <= range[2]
}
x <- c(10, 20, 30, 40, 50)
x %between% c(20, 40)
八、其他特殊运算符 #
8.1 管道运算符 (%>%) #
需要magrittr包:
r
install.packages("magrittr")
library(magrittr)
x <- c(1, 2, 3, 4, 5)
x %>% mean()
x %>% sum()
x %>% sqrt() %>% sum()
8.2 原生管道符 (|>) #
R 4.1+ 内置:
r
x <- c(1, 2, 3, 4, 5)
x |> mean()
x |> sum()
x |> sqrt() |> sum()
8.3 匿名函数 () #
R 4.1+ 内置:
r
x <- c(1, 2, 3, 4, 5)
x |> \(x) x * 2 |> sum()
x |> \(x) mean(x[x > 2])
九、运算符优先级 #
9.1 特殊运算符优先级 #
特殊运算符(%开头)具有相同的优先级,高于 * 和 /,低于 ^。
r
2 * 3 %in% c(1, 2, 3, 4, 5, 6)
2 ^ 3 %in% 8
9.2 括号改变优先级 #
r
(2 * 3) %in% c(1, 2, 3, 4, 5, 6)
2 ^ (3 %in% 3)
十、实践示例 #
10.1 数据筛选 #
r
data <- data.frame(
id = 1:10,
category = c("A", "B", "A", "C", "B", "A", "C", "B", "A", "C")
)
valid_categories <- c("A", "B")
filtered <- data[data$category %in% valid_categories, ]
print(filtered)
10.2 线性代数运算 #
r
A <- matrix(c(1, 2, 3, 4), nrow = 2)
b <- c(5, 6)
x <- solve(A, b)
print(x)
A %*% x
10.3 分组计算 #
r
data <- data.frame(
group = c("A", "A", "B", "B", "A"),
value = c(10, 20, 30, 40, 50)
)
groups <- unique(data$group)
for (g in groups) {
subset <- data[data$group %in% g, ]
cat(g, "组均值:", mean(subset$value), "\n")
}
10.4 自定义字符串运算符 #
r
`%+%` <- function(a, b) paste0(a, b)
`%*%` <- function(a, b) paste(rep(a, b), collapse = "")
"Hello" %+% " " %+% "World"
"-" %*% 10
十一、总结 #
本章学习了:
- 成员运算符 %in%
- 矩阵乘法运算符 %*%
- 整除运算符 %/%
- 取余运算符 %%
- Kronecker积 %x%
- 自定义运算符
- 管道运算符 %>% 和 |>
- 匿名函数 \
特殊运算符扩展了R语言的功能,使代码更加简洁和高效!
最后更新:2026-03-27