我有一个这样的列表列表:
list.ex <- list('a' = c(10,11), 'b' = c(9,10,11), 'c' = c(8,9,10,11), 'd' = c(7,8,9,10,11), 'e' = c(6,7,8,9,10,11), 'f' = c(6,8,9,10,11))
我想检查并删除那些属于另一个列表子集的列表(按确切顺序)。
例如在这种情况下,我想减少 list.ex
这样我们就剩下 list.ex[[e]]
和 list.ex[[f]]
.
最佳答案
is_subsequence
确定 a
是否是相同顺序的 b
的子集。
library(tidyverse)
is_subsequence <- function(a, b) {
str_detect(
paste0(b, collapse = ","),
fixed(paste0(a, collapse = ","))
)
}
matches_other
获取一个向量并确定它是否匹配 list.ex
matches_other <- function(l) {
map_lgl(
list.ex,
~is_subsequence(l, .)
) %>%
sum() %>%
`>`(1)
}
discard
用于删除匹配项。
list.ex %>%
discard(matches_other)
#> $e
#> [1] 6 7 8 9 10 11
#>
#> $f
#> [1] 6 8 9 10 11
关于r - 如何减少(子集)列表列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64465598/