You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较向量列表中的两两向量是否包含共同元素?

解决向量列表两两判断是否存在共同元素的问题

问题描述

给定一个长度可变的向量列表,需要生成一个矩阵,其中每个元素表示对应位置的两个向量是否包含共同元素(自身比较返回TRUE)。例如:

xx = list(a = 1,
          b = c(2, 3),
          c = c(1, 4, 6))

预期输出矩阵:

a     b     c
a  TRUE FALSE  TRUE
b FALSE  TRUE FALSE
c  TRUE FALSE  TRUE

错误原因分析

你之前使用outer结合%in%的方法返回全TRUE,是因为x %in% y返回的是逻辑向量(比如c(2,3) %in% c(1,4,6)返回FALSE, FALSE),而outer在处理这种多值结果时,会将整个向量视为逻辑真(非空向量在R的逻辑判断中默认被判定为TRUE),导致所有结果都显示为TRUE。我们需要的是单个逻辑值,表示两个向量是否存在至少一个共同元素。

正确解决方案

定义一个判断两个向量是否有交集的函数,结合outer使用即可:

# 定义判断函数:检查两个向量是否存在共同元素
has_common <- function(x, y) {
  any(x %in% y)
}

# 目标向量列表
xx = list(a = 1,
          b = c(2, 3),
          c = c(1, 4, 6))

# 生成结果矩阵
result <- outer(xx, xx, has_common)
print(result)

运行后输出:

a     b     c
a  TRUE FALSE  TRUE
b FALSE  TRUE FALSE
c  TRUE FALSE  TRUE

简化写法

也可以直接在outer中使用匿名函数,省去单独定义函数的步骤:

outer(xx, xx, function(x, y) any(x %in% y))

补充说明

  • any(x %in% y)会检查x中是否有至少一个元素存在于y中,返回单个TRUE/FALSE,正好符合需求。
  • 自身与自身比较时,any(x %in% x)必然返回TRUE,符合预期。

内容的提问来源于stack exchange,提问作者SamPassmore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:15:23