R - 运算符
R - 运算符
Section titled “R - 运算符”运算符是告诉 R 解释器执行特定数学、关系或逻辑运算的符号。R 拥有一套丰富的内置运算符,对于任何分析都至关重要。
- 算术运算符
- 关系运算符
- 逻辑运算符
- 赋值运算符
- 其他运算符(包括管道运算符)
这些运算符执行标准数学计算。当应用于向量时,运算是按元素级别执行的。
| 运算符 | 描述 | 示例 |
|---|---|---|
| + | 加法 | v <- c(2, 5.5, 6) t <- c(8, 3, 4) print(v + t) # [1] 10.0 8.5 10.0 |
| − | 减法 | v <- c(2, 5.5, 6) t <- c(8, 3, 4) print(v - t) # [1] -6.0 2.5 2.0 |
| * | 乘法 | v <- c(2, 5.5, 6) t <- c(8, 3, 4) print(v * t) # [1] 16.0 16.5 24.0 |
| / | 除法 | v <- c(2, 5.5, 6) t <- c(8, 3, 4) print(v / t) # [1] 0.250000 1.833333 1.500000 |
| %% | 求模(除法余数) | v <- c(2, 5.5, 6) t <- c(8, 3, 4) print(v %% t) # [1] 2.0 2.5 2.0 |
| %/% | 整除 | v <- c(2, 5.5, 6) t <- c(8, 3, 4) print(v %/% t) # [1] 0 1 1 |
| ^ | 幂运算 | v <- c(2, 5.5, 6) t <- c(8, 3, 4) print(v^t) # [1] 256.000 166.375 1296.000 |
这些运算符按元素级别比较两个向量,并返回一个逻辑向量(TRUE 或 FALSE)。
| 运算符 | 描述 | 示例 |
|---|---|---|
| > | 大于 | v <- c(2, 5.5, 6, 9) t <- c(8, 2.5, 14, 9) print(v > t) # [1] FALSE TRUE FALSE FALSE |
| < | 小于 | v <- c(2, 5.5, 6, 9) t <- c(8, 2.5, 14, 9) print(v < t) # [1] TRUE FALSE TRUE FALSE |
| == | 等于 | v <- c(2, 5.5, 6, 9) t <- c(8, 2.5, 14, 9) print(v == t) # [1] FALSE FALSE FALSE TRUE |
| <= | 小于或等于 | v <- c(2, 5.5, 6, 9) t <- c(8, 2.5, 14, 9) print(v <= t) # [1] TRUE FALSE TRUE TRUE |
| >= | 大于或等于 | v <- c(2, 5.5, 6, 9) t <- c(8, 2.5, 14, 9) print(v >= t) # [1] FALSE TRUE FALSE TRUE |
| != | 不等于 | v <- c(2, 5.5, 6, 9) t <- c(8, 2.5, 14, 9) print(v != t) # [1] TRUE TRUE TRUE FALSE |
逻辑运算符作用于逻辑向量。非零数字被视为 TRUE,零被视为 FALSE。元素级别运算(&、|)与短路运算(&&、||)之间存在关键区别。
| 运算符 | 描述 | 示例 |
|---|---|---|
| & | 按元素与运算。比较两个向量的每个元素。 | v1 <- c(TRUE, TRUE, FALSE, FALSE) v2 <- c(TRUE, FALSE, TRUE, FALSE) print(v1 & v2) # [1] TRUE FALSE FALSE FALSE |
| | | 按元素或运算。比较两个向量的每个元素。 | v1 <- c(TRUE, TRUE, FALSE, FALSE) v2 <- c(TRUE, FALSE, TRUE, FALSE) print(v1 | v2) # [1] TRUE TRUE TRUE FALSE |
| ! | 逻辑非运算。反转向量的每个元素。 | v1 <- c(TRUE, FALSE, 0, 6) print(!v1) # [1] FALSE TRUE TRUE FALSE |
| && | 短路与运算。仅评估每个向量的第一个元素,如果第一个元素是 FALSE 则停止。 | v <- c(TRUE, FALSE) t <- c(TRUE, TRUE) print(v && t) # 仅比较 v[1] 和 t[1] # [1] TRUE |
| || | 短路或运算。仅评估每个向量的第一个元素,如果第一个元素是 TRUE 则停止。 | v <- c(FALSE, TRUE) t <- c(FALSE, FALSE) print(v || t) # 仅比较 v[1] 和 t[1] # [1] FALSE |
这些运算符用于为变量赋值。R 社区对于使用哪个运算符有很强的惯例。
| 运算符 | 描述 | 最佳实践 |
|---|---|---|
| <- | 左赋值 | 这是 R 中首选的、地道的赋值运算符。 始终用它来为对象赋值。my_variable <- 10 |
| = | 左赋值 | 可用于赋值,但从风格上讲,在函数调用中设置参数时更倾向于使用它,以避免歧义。mean(x = my_data, na.rm = TRUE) |
| -> | 右赋值 | 将左侧的值赋给右侧的对象。它很少使用,因为它会降低可读性。10 -> my_variable(避免使用) |
| <<- | 全局赋值 | 将值赋给父环境中的对象。这会使代码非常难以调试,初学者应避免使用。它在函数内部有特定用途,但这些是高级主题。 |
这些运算符执行专门的任务,从创建序列到转换数据管道。
| 运算符 | 描述 | 示例 |
|---|---|---|
| : | 冒号运算符。创建数字序列。 | v <- 2:8 print(v) # [1] 2 3 4 5 6 7 8 |
| %in% | 值匹配。检查左向量的元素是否存在于右向量中。 | v1 <- c(5, 10, 15) t <- 1:10 print(v1 %in% t) # [1] TRUE TRUE FALSE |
| %*% | 矩阵乘法。执行点积矩阵乘法。 | A <- matrix(1:4, nrow = 2) B <- matrix(c(1, 0, 0, 1), nrow = 2) print(A %*% B) # [,1] [,2] # [1,] 1 3 # [2,] 2 4 |
| |> | 原生管道运算符。将左侧对象作为右侧函数的第一个参数传递。需要 R 版本 >= 4.1.0。 | # 计算正数的均值 my_data <- c(-1, 0, 5, 10, -5) my_data |> subset(x = _, subset = _ > 0) |> mean() # [1] 7.5 |
| %>% | Magrittr 管道运算符。最初的 Tidyverse 管道。比 |> 更强大(例如,带有 . 占位符)。 | library(magrittr) # 获取 iris 数据集中两列的相关性 iris %>% subset(Sepal.Length > 5) %>% cor(.$Sepal.Length, .$Petal.Length) # [1] 0.819382 |