我有一份清单清单:
library(partitions)
list_parts(3)
>[1] (1,2,3)
>[[2]]
>[1] (1,3)(2)
>[[3]]
>[1] (1,2)(3)
>[[4]]
>[1] (2,3)(1)
>[[5]]
>[1] (1)(2)(3)
我需要根据组合过滤掉某些列表,因为它们不可行。例如,列表[4]是不可能的,因为(2,3)不能是没有(1)的列表。如何基于组合规则集进行过滤,例如删除组合,其中2和3在列表中没有1?
答案 0 :(得分:0)
我们可以从this answer to Find vector in list of vectors借用该方法并将其包装在我们自己的函数中。
library(partitions)
p = listParts(3)
detect = function(p, pattern) {
Position(function(x) identical(x, pattern), p, nomatch = 0) > 0
}
test = sapply(p, detect, pattern = 2:3)
p[!test]
# [[1]]
# [1] (1,2,3)
#
# [[2]]
# [1] (1,3)(2)
#
# [[3]]
# [1] (1,2)(3)
#
# [[4]]
# [1] (1)(2)(3)