R语言批量计算单个向量与列表中各子向量的交集
R批量计算列表与固定向量交集的实现方法
直接使用R内置的lapply()函数即可实现批量遍历计算,无需手动编写多条intersect语句,可自动适配列表长度动态变化的场景。
测试数据复现
myVector <- c("Banana", "Apple", "Spinach", "Lettuce", "Candy", "Soda") myList <- list( Fruits = c("Orange", "Watermelon", "Banana", "Grape", "Apple", "Strawberry"), Veggies = c("Spinach", "Onion", "Carrot", "Lettuce", "Sprouts", "Cucumber"), Other = c("Soda", "Milk", "Water", "Candy") )
核心实现代码
仅需一行代码即可完成所有分类的交集计算,结果会自动保留原列表的分类命名:
intersect_result <- lapply(myList, intersect, myVector)
运行输出结果:
$Fruits [1] "Banana" "Apple" $Veggies [1] "Spinach" "Lettuce" $Other [1] "Soda" "Candy"
代码说明
lapply会自动遍历myList中的每一个元素,将其作为第一个参数传入intersect函数,写在后面的myVector会作为固定的第二个参数传入,刚好匹配intersect(分类向量, 待匹配向量)的计算逻辑- 无论后续你给
myList新增、删除多少个分类,这段代码都不需要修改,完全适配动态变化的列表结构 - 如果你使用的R版本低于4.1.0,也可以写成传统匿名函数的形式,效果完全一致:
intersect_result <- lapply(myList, function(category_vec) { intersect(category_vec, myVector) })
可选扩展用法
如果你需要给myVector中的每个食物匹配对应的分类标签,可以用以下代码实现:
food_category <- sapply(myVector, function(food) { names(which(sapply(myList, function(cat) food %in% cat))) })
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

