列表中的值匹配

时间:2018-12-31 20:01:26

标签: r list matching

我有一个由以下代码创建的列表:

lst <- list(c(c(1,2,3)), c(3,4,5))
names(lst) <- c("A","B")

看起来像这样:

> lst
$`A`
[1] 1 2 3

$B
[1] 3 4 5

如何以对每个列表元素返回true或false的方式来进行匹配的值?然后,如何提取正确的列表名称。因此,在此示例中,如果我想将值匹配为“ 2”,我想返回

[1] TRUE, FALSE

然后我想返回正确的列表名称,这样:

[1] "A"

如果我的值与3匹配,我会想要:

[1] TRUE, TRUE

[1] "A", "B"

我找不到实现此目标的方法。

谢谢。

2 个答案:

答案 0 :(得分:4)

您可以这样做:

val = 3
names(lst)[sapply(lst, function(x) val %in% x)]

[1] "A" "B"

说明:

  1. sapply(lst, function(x) val %in% x)):返回布尔值向量
  2. names:根据布尔值获取名称

答案 1 :(得分:2)

尝试一下:

lst = list(A = c(c(1,2,3)), B = c(3,4,5))

searchValue = 2
z = sapply(lst, function(x){ searchValue%in%x })

结果:

> z
    A     B 
 TRUE FALSE 

> names(z)[z]
[1] "A"