2012-01-23 20 views
5

我想要生成一个列表,其中包含编号为1:N的所有2^n个子集中的R. 如何可能?如何获得所有子集高达N在R

expand.grid(rep(list(0:4), 2)) 

返回包含0的所有子集的数据帧:4大小2 - ,但我想的列表,它包含了所有尺寸的所有子集。

回答

10

怎么样,

lapply(0:4, function(x) combn(4,x)) 
[[1]] 
    [,1] 

[[2]] 
    [,1] [,2] [,3] [,4] 
[1,] 1 2 3 4 

[[3]] 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 1 1 2 2 3 
[2,] 2 3 4 3 4 4 

[[4]] 
    [,1] [,2] [,3] [,4] 
[1,] 1 1 1 2 
[2,] 2 2 3 3 
[3,] 3 4 4 4 

[[5]] 
    [,1] 
[1,] 1 
[2,] 2 
[3,] 3 
[4,] 4 
+0

我结合这与对'magrittr'ers)'unlist(,recursive = FALSE)'('%>%unlist(recursive = FALSE)')将所有这些变成一个含有2^4个元素的列表,每个元素对应一个子集 – MichaelChirico

5

软件包集中有一个set_power函数,它应该返回您的文字所描述的合适词的权力集合。不过,你可能想修改你的术语,因为你的代码做了一些不同的事情。 expand.grid不返回数学集,而是有序组合。在集合论中{1,1}简化为{1}。在这种意义上,展开网格不会创建实际集合。如果你想所有的data.frames的最大长度是4是expand.grid可以使列表中,你可以得到很轻松地用:

lapply(0:4, function(n) expand.grid(rep(list(0:4), n))) 
相关问题