R语言逻辑运算符 #

一、逻辑运算符概述 #

逻辑运算符用于组合和操作逻辑值(TRUE和FALSE),是条件判断和数据筛选的基础。

二、基本逻辑运算符 #

2.1 逻辑与 (& 和 &&) #

向量化与 (&) #

r
TRUE & TRUE
TRUE & FALSE
FALSE & FALSE

c(TRUE, TRUE, FALSE) & c(TRUE, FALSE, FALSE)

短路与 (&&) #

r
TRUE && TRUE
TRUE && FALSE
FALSE && TRUE
FALSE && FALSE

c(TRUE, FALSE) && c(TRUE, TRUE)

2.2 逻辑或 (| 和 ||) #

向量化或 (|) #

r
TRUE | FALSE
FALSE | FALSE
TRUE | TRUE

c(TRUE, FALSE, FALSE) | c(FALSE, TRUE, FALSE)

短路或 (||) #

r
TRUE || FALSE
FALSE || TRUE
FALSE || FALSE

c(TRUE, FALSE) || c(FALSE, TRUE)

2.3 逻辑非 (!) #

r
!TRUE
!FALSE

!c(TRUE, FALSE, TRUE)

三、运算符区别 #

3.1 & vs && #

运算符 类型 说明
& 向量化 对每个元素进行运算
&& 标量 只检查第一个元素,短路求值
r
x <- c(TRUE, FALSE, TRUE)
y <- c(FALSE, TRUE, FALSE)

x & y
x && y

x <- c(FALSE, TRUE, TRUE)
y <- c(TRUE, FALSE, FALSE)

x && y

3.2 | vs || #

运算符 类型 说明
| 向量化 对每个元素进行运算
|| 标量 只检查第一个元素,短路求值
r
x <- c(TRUE, FALSE, TRUE)
y <- c(FALSE, TRUE, FALSE)

x | y
x || y

x <- c(TRUE, FALSE, FALSE)
y <- c(FALSE, TRUE, TRUE)

x || y

3.3 使用场景 #

r
if (TRUE && FALSE) {
  print("条件为真")
}

x <- c(10, 20, 30)
if (all(x > 5) && any(x > 25)) {
  print("所有元素大于5,且存在元素大于25")
}

四、逻辑真值表 #

4.1 与运算真值表 #

A B A & B
TRUE TRUE TRUE
TRUE FALSE FALSE
FALSE TRUE FALSE
FALSE FALSE FALSE

4.2 或运算真值表 #

A B A | B
TRUE TRUE TRUE
TRUE FALSE TRUE
FALSE TRUE TRUE
FALSE FALSE FALSE

4.3 非运算真值表 #

A !A
TRUE FALSE
FALSE TRUE

五、逻辑函数 #

5.1 all函数 #

r
all(c(TRUE, TRUE, TRUE))
all(c(TRUE, FALSE, TRUE))
all(c(FALSE, FALSE, FALSE))

x <- c(5, 10, 15)
all(x > 0)
all(x > 10)

5.2 any函数 #

r
any(c(TRUE, FALSE, FALSE))
any(c(FALSE, FALSE, FALSE))
any(c(TRUE, TRUE, TRUE))

x <- c(5, 10, 15)
any(x > 10)
any(x > 20)

5.3 which函数 #

r
x <- c(10, 20, 30, 40, 50)

which(x > 25)
which(x == 30)
which(x != 20)

5.4 ifelse函数 #

r
x <- c(10, 20, 30, 40, 50)

ifelse(x > 25, "大", "小")

scores <- c(85, 60, 45, 90, 55)
ifelse(scores >= 60, "及格", "不及格")

六、NA值处理 #

6.1 NA与逻辑运算 #

r
TRUE & NA
FALSE & NA
TRUE | NA
FALSE | NA
!NA

6.2 处理NA #

r
x <- c(TRUE, NA, FALSE)

all(x)
all(x, na.rm = TRUE)

any(x)
any(x, na.rm = TRUE)

6.3 检查NA #

r
x <- c(TRUE, NA, FALSE)

is.na(x)
!is.na(x)
x[!is.na(x)]

七、运算符优先级 #

7.1 优先级顺序 #

从高到低:

优先级 运算符
1 !
2 &
3 |
4 &&
5 ||

7.2 示例 #

r
TRUE | FALSE & FALSE
(TRUE | FALSE) & FALSE

!TRUE & FALSE
!(TRUE & FALSE)

TRUE && FALSE || TRUE
TRUE && (FALSE || TRUE)

八、组合条件 #

8.1 多条件与 #

r
x <- 25

x > 20 & x < 30
x >= 20 & x <= 30 & x != 25

8.2 多条件或 #

r
x <- 15

x < 10 | x > 20
x == 10 | x == 15 | x == 20

8.3 混合条件 #

r
x <- 25

(x > 20 & x < 30) | x == 100
(x < 10 | x > 20) & x != 25

8.4 排除条件 #

r
x <- c(10, 20, 30, 40, 50)

!(x > 30)
x[!(x > 30)]

九、逻辑索引 #

9.1 向量筛选 #

r
x <- c(10, 20, 30, 40, 50)

x[x > 25]
x[x != 30]
x[x >= 20 & x <= 40]

9.2 数据框筛选 #

r
df <- data.frame(
  name = c("张三", "李四", "王五"),
  age = c(25, 30, 22),
  score = c(85, 90, 78)
)

df[df$age > 24, ]
df[df$score >= 85, ]
df[df$age > 24 & df$score >= 85, ]

十、实践示例 #

10.1 数据验证 #

r
validate_data <- function(age, score) {
  valid_age <- age > 0 & age < 120
  valid_score <- score >= 0 & score <= 100
  
  if (all(valid_age) && all(valid_score)) {
    return(TRUE)
  } else {
    return(FALSE)
  }
}

validate_data(c(25, 30), c(85, 90))
validate_data(c(-5, 30), c(85, 90))

10.2 条件分类 #

r
classify <- function(x) {
  ifelse(x < 0, "负数",
         ifelse(x == 0, "零", "正数"))
}

classify(c(-5, 0, 10))

10.3 多条件筛选 #

r
data <- data.frame(
  name = c("张三", "李四", "王五", "赵六"),
  age = c(25, 30, 22, 35),
  score = c(85, 90, 78, 88)
)

result <- data[
  data$age >= 25 & 
  data$age <= 30 & 
  data$score >= 80, 
]
print(result)

10.4 异常检测 #

r
detect_outliers <- function(x) {
  q <- quantile(x, c(0.25, 0.75))
  iqr <- q[2] - q[1]
  lower <- q[1] - 1.5 * iqr
  upper <- q[2] + 1.5 * iqr
  
  x < lower | x > upper
}

x <- c(1, 2, 3, 4, 5, 100)
detect_outliers(x)

十一、总结 #

本章学习了:

  • 基本逻辑运算符:&、|、!
  • 向量化与短路运算符的区别
  • 逻辑真值表
  • 逻辑函数:all、any、which、ifelse
  • NA值处理
  • 运算符优先级
  • 组合条件和逻辑索引

逻辑运算符是条件判断和数据筛选的核心工具,在数据分析中不可或缺!

最后更新:2026-03-27