2013-07-15 71 views
1

我有一个函数可以为列表的列表生成一个集合的所有子集。 我想按大小对它们进行分组,并有一个列表(用不同大小索引),列表(用于子集的集合),列表(用于子集)按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的方式来执行此操作?

+0

对不起,它的工作原理。我删除了评论...但是这个代码是你的输入吗?..不清楚预期的输出。 – agstudy

+0

好吧我会更详细地描述输入/输出 – nicolas

+0

按“size”做你的意思是元素列表的长度吗?也许这可以“帮助(P3,长度)”。 – agstudy

回答

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]) 
+0

有点像这样......但对于任何可能的尺寸。在dotnet中,它将像IEnumerable.groupby操作一样,将提供长度函数 – nicolas

+0

lapply的另一个应用程序可以做到这一点。尽管感觉必须有更好的方式。 – nicolas

+0

@nicolas是有更好的选择... – agstudy