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