根据列表组合过滤列表列表 - R.

时间:2018-01-25 14:31:14

标签: r

我有一份清单清单:

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?

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)