我有一个函数,可以在列表列表中生成集合的所有子集。 我想按大小对它们进行分组,并有一个列表(由不同大小索引),列表(用于子集的集合),列表(用于子集)
这是用于生成输入的代码(所有子集的列表)
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方式是什么?
答案 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] )