按R中的嵌套大小对列表进行分组

时间:2013-07-15 11:35:33

标签: r

我有一个函数,可以在列表列表中生成集合的所有子集。 我想按大小对它们进行分组,并有一个列表(由不同大小索引),列表(用于子集的集合),列表(用于子集)

这是用于生成输入的代码(所有子集的列表)

library(plyr) 
library(ggplot2) 

all.subsets <- function(set) {   n <- length(set)   
                                 bin <- expand.grid(rlply(n, c(F, T)))
                                 mlply(bin, function(...) { set[c(...)] }) }

P3 <- all.subsets(c("a","b","c"))  

现在我想要而不是整个子集列表,一个由大小索引索引的集合,并且它给出了该大小的所有子集的集合。

执行此操作的R方式是什么?

1 个答案:

答案 0 :(得分:1)

要使所有嵌套列表的长度等于1,您可以执行以下操作:

P3[lapply(P3,length) ==1]   ## get all elements with size equal to 1

$`2`
[1] "a"

$`3`
[1] "b"

$`5`
[1] "c"

现在,我们可以使用它来按照长度对嵌套列表进行分组。我们在所有唯一长度上循环(lapply),并为每个长度执行上述语句:

lapply(unique(unlist(lapply(P3,length))),
       function(x) P3[lapply(P3,length) ==x] )