将列表部分匹配到列表列表

拉玛先生

我对R还是很陌生,我很难在这个问题上正确地措辞,所以如果这是重复的话,我提前致歉。

我有一个定长列表的列表,所有列表都具有相同的命名成员。这是我的haystack
我有一个包含命名成员的列表,但其中一些缺失。这是我的needle

我想返回一个简单的TRUE / FALSE(如果needle存在于中)haystack

例子:

这应该返回TRUE:所有needle的成员都匹配,haystack[[1]]即使缺少c

haystack <- list( list(a = 1, b = 2, c = 3), list(a = 4, b = 5, c = 6) )
needle <- list(a = 1, b = 2)
something(needle, haystack)

这应该返回FALSE:needle的值match haystack[[1]],但是它们的名称不同

haystack <- list( list(a = 1, b = 2, c = 3), list(a = 4, b = 5, c = 6) )
needle <- list(x = 1, y = 2)
something(needle, haystack)

这应该返回FALSE:a = 1并且b = 5存在于haystack,但不在同一列表中

haystack <- list( list(a = 1, b = 2, c = 3), list(a = 4, b = 5, c = 6) )
needle <- list(a = 1, b = 5)
something(needle, haystack)

到目前为止lapply(haystack, match, table = needle)我找到的最接近的是,但是A)不尊重名称匹配,B)我不确定如何将其结果转换为逻辑。

如果有一个库可以简化此过程,请随时将其合并到您的答案中。

希罗卡

这可能有点粗糙,但我认为它可以胜任。我们需要在此处解决的问题是要同时匹配名称和值。一种非常简单的方法是将它们粘贴在一起。

haystack2 <- lapply(haystack,function(x){
  res <- paste0(names(x),x)
  res
})
# > haystack2
# [[1]]
# [1] "a1" "b2" "c3"
# 
# [[2]]
# [1] "a4" "b5" "c6"

needle2 <- paste0(names(needle),needle)
# > needle2
# [1] "a1" "b2"

然后我们可以使用lapply和%in%:

res <- any(sapply(haystack2,function(x) all(needle2 %in% x)))
# > res
# [1] TRUE

包装函数很容易,可以选择返回找到针的干草堆的索引。

something <- function(haystack, needle, position=F){
  haystack2 <- lapply(haystack,function(x) paste0(names(x),x))
  needle2 <- paste0(names(needle),needle)
  res <- sapply(haystack2,function(x) all(needle2 %in% x))
  if(position){
    return(which(res))
  } 
  return(any(res))
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将元素匹配到总和列表

来自分类Dev

将向量匹配到向量列表

来自分类Dev

在Python的列表列表中查找部分匹配项

来自分类Dev

在列表列表中匹配

来自分类Dev

将字符串匹配到元组列表

来自分类Dev

将字符串匹配到元组列表

来自分类Dev

PHP in_array将搜索值匹配到数组列表

来自分类Dev

将列表细分为列表列表

来自分类Dev

将列表替换为列表列表

来自分类Dev

将列表追加到列表列表

来自分类Dev

将列表转换为列表列表

来自分类Dev

将列表拆分为列表列表

来自分类Dev

通过将某些文件的名称部分匹配到文本文件中的列表来复制某些文件

来自分类Dev

Scala中列表列表的模式匹配

来自分类Dev

将列表列表列表转换为数据框

来自分类Dev

将列表 + 列表列表转换为地图列表

来自分类Dev

列表列表乘以列表列表

来自分类Dev

将列表列表传递给功能

来自分类Dev

将矩阵转换为列表列表

来自分类Dev

将数据解析为列表列表

来自分类Dev

从“列表列表列表”到“列表列表”-Python

来自分类Dev

通过列表理解将列表列表添加到列表列表

来自分类Dev

将列表列表附加到列表中,并清除原始列表列表

来自分类Dev

遍历列表列表

来自分类Dev

列表列表的排列

来自分类Dev

创建列表列表

来自分类Dev

词典列表列表?

来自分类Dev

遍历列表列表

来自分类Dev

遍历列表列表