【发布时间】:2016-04-16 17:15:36
【问题描述】:
我有一个清单:l1 = list(1, 3, 5)
我还有另一个列表:l2 = list(list(1, 3), list(2, 6), list(3, 5), list(1, 5))
我想检查 l1 的每个 2 项子集(即list(1, 3)、list(1, 5) 和 list(3, 5))是否存在于 l2 中。
在这种情况下,我只想直接回答 TRUE。
我该怎么做?
【问题讨论】:
我有一个清单:l1 = list(1, 3, 5)
我还有另一个列表:l2 = list(list(1, 3), list(2, 6), list(3, 5), list(1, 5))
我想检查 l1 的每个 2 项子集(即list(1, 3)、list(1, 5) 和 list(3, 5))是否存在于 l2 中。
在这种情况下,我只想直接回答 TRUE。
我该怎么做?
【问题讨论】:
首先找到l1的所有可能组合,以列表的形式返回。
cmb <- combn(l1, 2, simplify = FALSE)
擦掉我原来的答案,并以@alexis_laz 的评论为基础,你想要%in%。
l2 <- list(list(1, 3), list(2, 6), list(3, 5), list(1, 5))
cmb %in% l2
# [1] TRUE TRUE TRUE
all(cmb %in% l2)
# [1] TRUE
但是当我们在 cmets 中提到新的 l2 OP 时(我会称之为 l3),我们会得到 p>
l3 <- list(list(1, 3), list(2, 6), list(3, 5), list(1, 6))
cmb %in% l3
# [1] TRUE FALSE TRUE
all(cmb %in% l3)
# [1] FALSE
【讨论】:
any 应该是all,不是吗?其次,list(1, 3) 和 list(3, 1) 应该被认为是相同的吗?
cmb,另一种似乎是all(cmb %in% l2)