Menu
CoddyTech

%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% 运算符特别有用。

challenge icon

挑战

简单

你会收到三行输入:

  1. 库存中物品的逗号分隔列表(例如,apple,banana,milk,bread,eggs,cheese)
  2. 购物清单中物品的逗号分隔列表(例如,milk,butter,eggs,juice)
  3. 正在促销的物品的逗号分隔列表(例如,bread,juice,yogurt)

使用 %in% 运算符:

  1. 根据每行逗号分隔的输入创建字符向量
  2. 检查购物清单中的哪些物品已在库存中,并打印逻辑向量结果
  3. 筛选并打印购物清单中不在库存中的物品(你需要购买的物品)
  4. 筛选并打印你需要购买且正在促销的物品

例如,如果输入为:

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. 筛选出你需要购买且正在促销的商品
quiz icon自我测试

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

基础知识中的所有课

自己练习: R 在线编译器