【问题标题】:value match within a list列表中的值匹配
【发布时间】:2019-05-28 04:44:06
【问题描述】:

我有一个这样的代码创建的列表:

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"

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

谢谢。

【问题讨论】:

    标签: r list matching


    【解决方案1】:

    你可以这样做:

    val = 3
    names(lst)[sapply(lst, function(x) val %in% x)]
    
    [1] "A" "B"
    

    解释:

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

    【讨论】:

    • sapply 可以方便地替代 unlist(lapply(...))vapply,如果您想要更安全的类型严格性。
    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多