1

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

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

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 方法是什么?

4

1 回答 1

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] )
于 2013-07-15T11:55:40.580 回答