2012-06-21 7 views
5

Ho una lista asimmetrica, cioè il numero di elementi in ogni sottoelenco è diverso. Come posso convertire l'elenco in una matrice?R: convertire la lista asimmetrica in matrice - il numero di elementi in ciascuna sottodirectory differisce

Di seguito, iniziare con un elenco simmetrico e convertirlo in una matrice in due modi diversi.

# create a symmetric list 

my.list1 <- list(c(1,2,3,4),c(5,6,7,8),c(9,10,11,12)) 
my.list1 

# convert symmetric list to a matrix 

mat.a1 <- matrix(unlist(my.list1), nrow=length(my.list1), byrow=T) 
mat.a1 

# alternative method to convert symmetric list to a matrix 

mat.b1 <- do.call(rbind, my.list1) 
mat.b1 

Poi ho creare una lista asimmetrica:

# create an asymmetric list 

my.list2 <- list(c(1,2,3,4),c(5,6,7,8,9),c(10,11,12,13)) 
my.list2 

Qui è la matrice desiderata:

# desired result 

#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 1 2 3 4 NA 
# [2,] 5 6 7 8 9 
# [3,] 10 11 12 13 NA 

risposta

7

In primo luogo, si estendono ogni vettore nella vostra lista con AN per ottenere vettori della stessa lunghezza. Quindi crea la tua matrice. Ad esempio:

max.len <- max(sapply(my.list2, length)) 
corrected.list <- lapply(my.list2, function(x) {c(x, rep(NA, max.len - length(x)))}) 
mat <- do.call(rbind, corrected.list) 
Problemi correlati