2012-01-23 14 views
5

Quiero generar una lista que contiene los 2^n subconjuntos de los números 1: N en R. ¿Cómo es posible?cómo obtener todos los subconjuntos hasta N en R

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

devuelve una trama de datos que contiene todos los subconjuntos de 0: 4 tamaño 2 - pero quiero una lista, que contiene todos los subconjuntos de todos los tamaños.

Respuesta

10

¿Qué tal,

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

que combina esto con 'unlist (, recursive = FALSE)' ('%>% unlist (recursive = FALSE)' a 'magrittr'ers) para obtener todos estos en una lista con elementos' 2^4', cada uno correspondiente a un subconjunto – MichaelChirico

5

Hay una función set_power en conjuntos de paquetes que deben devolver el conjunto de energía que es el término adecuado de lo que describen sus palabras. Sin embargo, es posible que desee revisar su terminología, ya que su código está haciendo algo diferente. expand.grid no devuelve conjuntos matemáticos sino combinaciones ordenadas. En la teoría de conjuntos, {1,1} se reduce a {1}. Expandir grilla no hace creación de conjuntos reales en ese sentido. Si quería la lista de todos los data.frames longitud de hasta 4 expand.grid que podría hacer, usted puede conseguir que con bastante facilidad con:

lapply(0:4, function(n) expand.grid(rep(list(0:4), n))) 
Cuestiones relacionadas