逻辑运算符与布尔逻辑
了解 &, |, !, xor(), any() 和 all() 如何执行布尔运算
逻辑运算符与布尔逻辑 是 CoddyKit 上的免费 R Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 R Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 R Academy 课程共包含 4 节课。
布尔逻辑简介
布尔逻辑是编程中进行决策的基础。在 R 中,逻辑值是 TRUE 和 FALSE。逻辑运算符可以组合这些值,形成复杂条件。
# Boolean values in R
is_raining <- TRUE
is_cold <- FALSE
cat('Is raining:', is_raining, '
')
cat('Is cold:', is_cold, '
')
cat('Class:', class(is_raining), '
')使用 & 进行逐元素 AND 运算
& 运算符对向量执行逐元素 AND 运算。只有当对应的两个元素都为 TRUE 时,它才返回 TRUE。它会处理向量中的每个元素。
ages <- c(15, 22, 17, 30, 19)
has_id <- c(FALSE, TRUE, FALSE, TRUE, TRUE)
# Can buy alcohol? (must be 18+ AND have ID)
can_buy <- (ages >= 18) & has_id
cat('Ages >= 18:', ages >= 18, '
')
cat('Has ID:', has_id, '
')
cat('Can buy:', can_buy, '
')使用 | 进行逐元素 OR 运算
| 运算符执行逐元素 OR 运算。当对应元素中至少有一个为 TRUE 时,它会返回 TRUE。
scores_math <- c(85, 45, 72, 38, 90)
scores_english <- c(40, 88, 65, 70, 55)
# Pass if either subject >= 60
passes <- (scores_math >= 60) | (scores_english >= 60)
cat('Math pass:', scores_math >= 60, '
')
cat('English pass:', scores_english >= 60, '
')
cat('Overall pass:', passes, '
')使用 ! 进行逻辑 NOT 运算
! 运算符会对逻辑值取反,将 TRUE 变为 FALSE,反之亦然。在求值顺序中,它会先于 & 和 | 运算。
is_weekend <- c(TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE)
cat('Is weekend:', is_weekend, '
')
cat('Is weekday:', !is_weekend, '
')
# Count weekdays
cat('Number of weekdays:', sum(!is_weekend), '
')使用 && 进行标量 AND 运算
&& 是 AND 的标量版本,只计算每个向量的第一个元素,并使用短路求值:如果左侧为 FALSE,则永远不会计算右侧。
x <- 10
# Short-circuit: second condition skipped if first is FALSE
if (x > 0 && x < 100) {
cat('x is a positive double-digit or less
')
}
# && only looks at first element
cat('TRUE && FALSE:', TRUE && FALSE, '
')
cat('TRUE & FALSE (vectorised):', TRUE & FALSE, '
')使用 || 进行标量 OR 运算
|| 是 OR 的标量版本,并使用短路求值:如果左侧为 TRUE,则永远不会计算右侧。在 if 语句中只需要单个结果时,请使用 ||。
user_role <- 'admin'
# Short-circuit OR — stops at first TRUE
if (user_role == 'admin' || user_role == 'superuser') {
cat('Access granted
')
} else {
cat('Access denied
')
}
cat('FALSE || TRUE:', FALSE || TRUE, '
')使用 xor() 进行异或运算
当 x 或 y 中恰好一个为 TRUE 时,xor(x, y) 返回 TRUE。当两者相同时,它返回 FALSE。这对切换逻辑很有用。
# xor truth table
cat('xor(TRUE, TRUE):', xor(TRUE, TRUE), '
') # FALSE
cat('xor(TRUE, FALSE):', xor(TRUE, FALSE), '
') # TRUE
cat('xor(FALSE, TRUE):', xor(FALSE, TRUE), '
') # TRUE
cat('xor(FALSE, FALSE):', xor(FALSE, FALSE), '
') # FALSE
# Practical: exactly one sensor triggered
sensor_a <- c(TRUE, FALSE, TRUE, FALSE)
sensor_b <- c(FALSE, FALSE, TRUE, TRUE)
cat('Exactly one sensor:', xor(sensor_a, sensor_b), '
')any() 和 all()
如果至少有一个元素为 TRUE,any() 就返回 TRUE。只有当每个元素都为 TRUE 时,all() 才返回 TRUE。这两个函数都会将逻辑向量归并为单个值。
temperatures <- c(22.1, 24.5, 19.8, 31.2, 28.0)
cat('Any temperature above 30?', any(temperatures > 30), '
')
cat('All temperatures above 15?', all(temperatures > 15), '
')
cat('All temperatures above 25?', all(temperatures > 25), '
')
# Useful for data validation
test_scores <- c(78, 85, 92, 88, 76)
cat('All passed (>=60)?', all(test_scores >= 60), '
')组合逻辑运算符
您可以串联多个逻辑运算符来构建复杂条件。R 会先计算 !,然后计算 &,最后计算 |。请使用括号明确表达您的意图。
age <- 25
income <- 55000
credit_score <- 720
# Loan eligibility: age 21-65, income >= 40000, credit >= 700
eligible <- (age >= 21 && age <= 65) &&
(income >= 40000) &&
(credit_score >= 700)
cat('Loan eligible:', eligible, '
')对数据框使用逻辑运算符
逻辑运算符在筛选数据框时非常有用。您可以组合多个条件,准确选择所需的行。
# Simple data frame
names_vec <- c('Alice', 'Bob', 'Carol', 'Dave', 'Eve')
ages_vec <- c(28, 35, 22, 45, 31)
salaries <- c(55000, 72000, 38000, 90000, 61000)
# Filter: age 25-40 AND salary above 50000
mask <- (ages_vec >= 25 & ages_vec <= 40) & (salaries > 50000)
cat('Matching employees:', names_vec[mask], '
')布尔运算
在 R 中,进行算术运算时,TRUE 会被视为 1,FALSE 会被视为 0。因此,您可以使用 sum() 统计 TRUE 值的数量,并使用 mean() 获取其比例。
responses <- c(TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE)
cat('Number of TRUE:', sum(responses), '
')
cat('Proportion TRUE:', mean(responses), '
')
cat('Percentage:', mean(responses) * 100, '%
')
# Count values meeting a condition
scores <- c(88, 45, 92, 61, 73, 55, 84)
cat('Number passing (>=60):', sum(scores >= 60), '
')快速检查
在 R 中,& 和 && 有什么区别?
回顾:R 中的布尔逻辑
非常好!以下是本课的重点:
&和|是向量化的,会逐个元素进行比较&&和||是带短路求值的标量运算符,用于if语句!会对逻辑值取反- 当恰好一个参数为
TRUE时,xor()返回TRUE any()和all()会将逻辑向量归并为单个值TRUE == 1且FALSE == 0,因此您可以对逻辑向量求和或求平均值
# Summary: all logical operators at a glance
x <- c(TRUE, FALSE, TRUE)
y <- c(TRUE, TRUE, FALSE)
cat('x & y :', x & y, '
')
cat('x | y :', x | y, '
')
cat('!x :', !x, '
')
cat('xor :', xor(x, y), '
')
cat('any(x):', any(x), '
')
cat('all(x):', all(x), '
')常见问题解答
「逻辑运算符与布尔逻辑」课时是免费的吗?
是的 — 「逻辑运算符与布尔逻辑」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 R Academy 课程的其余内容,请升级到 CoddyKit PRO。 R Academy 课程共包含 4 节课。
「逻辑运算符与布尔逻辑」这节课中我会学到什么?
了解 &, |, !, xor(), any() 和 all() 如何执行布尔运算 你通过在浏览器中直接运行的动手代码来练习 R Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 R Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 R Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「逻辑运算符与布尔逻辑」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 R Academy 课中编写并运行代码吗?
能。每节 R Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 算术与比较运算符
- 逻辑运算符与布尔逻辑
- 赋值与特殊运算符
- 运算符优先级与复杂表达式