Menu
CoddyTech

向量化逻辑第 2 部分

本课属于 Coddy R 学习旅程的“基础知识”单元。第 21 课,共 78 课。

和 AND、OR 一样,NOT 运算符也有向量化版本,可以对向量中的元素逐个操作。对逻辑值向量应用 ! 时,它会逐个翻转每个元素。

passed <- c(TRUE, FALSE, TRUE, FALSE)
!passed  # FALSE TRUE FALSE TRUE

每个 TRUE 都会变成 FALSE,每个 FALSE 都会变成 TRUE。当你想找出不满足某个条件的元素时,这尤其有用:

temperatures <- c(18, 25, 30, 15, 22)

# 找出不高于 20 的温度
!(temperatures > 20)  # TRUE FALSE FALSE TRUE FALSE

你可以将向量化的 NOT 与 & 和 | 结合起来,构建复杂的筛选条件:

ages <- c(16, 25, 17, 30, 14)
has_permission <- c(TRUE, TRUE, FALSE, TRUE, TRUE)

# 满足以下条件即可参加:age >= 18,或(未满 18 岁且获得许可)
can_participate <- ages >= 18 | (ages < 18 & has_permission)
# TRUE TRUE FALSE TRUE TRUE

记住:处理向量时使用单个 &、| 和 !,比较单个值时使用双个 &&、||。

challenge icon

挑战

简单

使用向量化的 NOT 运算符(!),以及 & 和 |,创建复杂的逐元素逻辑条件。

已提供以下向量:

scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)

使用向量化逻辑运算符(包括 NOT 运算符)创建以下逻辑向量:

  1. 创建一个名为 failed 的向量,对于每个分数不大于或等于 60 的学生,存储 TRUE
  2. 创建一个名为 absent 的向量,存储与 attended 相反的值(翻转每个值)
  3. 创建一个名为 at_risk 的向量,对于每个没有出席或没有提交作业的学生,存储 TRUE
  4. 创建一个名为 passing_but_absent 的向量,对于每个分数大于或等于 60并且没有出席的学生,存储 TRUE
  5. 创建一个名为 needs_support 的向量,对于满足以下条件的每个学生,存储 TRUE:(分数小于 50)或(没有出席并且没有提交作业)

使用 print() 函数,按此顺序显示 failed、absent、at_risk、passing_but_absent 和 needs_support。

亲手试试

# 给定的向量
scores <- c(45, 72, 88, 55, 91, 38, 67)
attended <- c(TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE)
submitted_homework <- c(TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)

# TODO: 在下方编写你的代码
# 1. 创建 'failed':分数不满足 >= 60 时为 TRUE

# 2. 创建 'absent':值与 attended 相反

# 3. 创建 'at_risk':未出勤或未提交作业

# 4. 创建 'passing_but_absent':分数 >= 60 且未出勤

# 5. 创建 'needs_support':(分数 < 50)或(未出勤且未提交作业)

# 打印结果
print(failed)
print(absent)
print(at_risk)
print(passing_but_absent)
print(needs_support)
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: R 在线编译器