2012-01-23 22 views
5

Voglio generare un elenco che contenga tutti i 2^n sottoinsiemi dei numeri 1: N in R. Come è possibile?come ottenere tutti i sottoinsiemi fino a N in R

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

restituisce un frame di dati contenente tutti i sottoinsiemi di 0: 4 dimensioni 2 - Ma io voglio un elenco, che contiene tutti i sottoinsiemi di tutte le dimensioni.

risposta

10

ne dite,

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

ho combinato questo con 'unlist (, recursive = FALSE)' ('%>% unlist (recursive = FALSE)' ai 'magrittr'ers) per ottenere tutti questi elementi in una lista con elementi' 2^4', ognuno corrispondente ad un sottoinsieme – MichaelChirico

5

C'è una funzione set_power in insiemi di pacchetti che dovrebbe restituire il set di alimentazione che è il termine corretto da ciò che le parole stanno descrivendo. Si consiglia di rivedere la terminologia, tuttavia, poiché il codice sta facendo qualcosa di diverso. expand.grid non restituisce set matematici ma combinazioni piuttosto ordinate. Nella teoria degli insiemi {1,1} si riduce a {1}. La griglia espansa non crea una vera creazione di set in quel senso. Se si voleva la lista di tutti i data.frames lunghezza fino a 4 che expand.grid potrebbe fare, è possibile ottenere che abbastanza facilmente con:

lapply(0:4, function(n) expand.grid(rep(list(0:4), n))) 
Problemi correlati