%in% 运算符
本课属于 Coddy R 学习旅程的“基础知识”单元。第 70 课,共 78 课。
有时,你需要检查某个值是否存在于向量中。%in% 运算符可以简洁地测试成员关系,对于每个匹配的元素返回 TRUE,否则返回 FALSE。
基本语法用于检查左侧的值是否存在于右侧的向量中:
fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)输出:
[1] TRUE你还可以一次检查多个值。这个运算符会返回一个逻辑向量,其中每个被检查的值对应一个结果:
fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)输出:
[1] TRUE FALSE TRUE这使得 %in% 非常适合用于筛选。结合逻辑索引,你可以提取属于特定集合的元素:
numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])输出:
[1] 1 3 2在验证用户输入或根据预定义的可接受值列表筛选数据时,%in% 运算符特别有用。
挑战
简单你会收到三行输入:
- 库存中物品的逗号分隔列表(例如,
apple,banana,milk,bread,eggs,cheese) - 购物清单中物品的逗号分隔列表(例如,
milk,butter,eggs,juice) - 正在促销的物品的逗号分隔列表(例如,
bread,juice,yogurt)
使用 %in% 运算符:
- 根据每行逗号分隔的输入创建字符向量
- 检查购物清单中的哪些物品已在库存中,并打印逻辑向量结果
- 筛选并打印购物清单中不在库存中的物品(你需要购买的物品)
- 筛选并打印你需要购买且正在促销的物品
例如,如果输入为:
apple,banana,milk,bread,eggs
milk,butter,eggs,juice,apple
bread,juice,yogurt,butter输出应为:
[1] TRUE FALSE TRUE FALSE TRUE
[1] "butter" "juice"
[1] "butter" "juice"说明:
- 将购物清单与库存进行核对:milk(TRUE)、butter(FALSE)、eggs(TRUE)、juice(FALSE)、apple(TRUE)
- 不在库存中的物品(需要购买):butter、juice
- 需要购买且正在促销的物品:butter 和 juice 都在促销列表中
将 ! 运算符与 %in% 一起使用,找出不在某个向量中的物品。
亲手试试
# 读取输入
con <- file("stdin", "r")
inventory_input <- suppressWarnings(readLines(con, n = 1))
shopping_list_input <- suppressWarnings(readLines(con, n = 1))
sale_items_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# TODO: 在下方编写你的代码
# 1. 使用 strsplit() 将每个以逗号分隔的输入转换为字符向量
# 2. 检查购物列表中的哪些商品已经在库存中(使用 %in%)
# 3. 筛选购物列表中库存里没有的商品(结合使用 ! 和 %in%)
# 4. 筛选出你需要购买且正在促销的商品这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: R 在线编译器