2012-01-23 51 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))) 
相關問題