2013-05-10 10 views
5

Ho una matrice M e voglio creare 3 liste ciascuna lista contiene i nomi di riga di matrice M significa che examle fro per la lista fisrt, voglio avere e m[ ,1]$b = 2. Come posso farlo in R per ogni colonna?Crea lista da ciascuna colonna della matrice R

m 
     [,1] [,2] [,3] 
    a 1 3 5 
    b 2 4 6 

Ho provato questo codice, ma non è il mio risultato desiderio

> list(m[, 1]) 
    [[1]] 
    a b 
    1 2 

risposta

4

Questo creerà una lista di liste:

apply(M, 2, as.list) 

E se la tua matrice aveva i nomi, quelli con ould anche essere usato come i nomi della vostra lista di livello superiore:

M <- matrix(1:6, nrow = 2, dimnames = list(c("a", "b"), c("c1", "c2", "c3"))) 
apply(M, 2, as.list) 
# $c1 
# $c1$a 
# [1] 1 
# 
# $c1$b 
# [1] 2 
# 
# 
# $c2 
# $c2$a 
# [1] 3 
# 
# $c2$b 
# [1] 4 
# 
# 
# $c3 
# $c3$a 
# [1] 5 
# 
# $c3$b 
# [1] 6 
+0

Grazie per la risposta, ma come faccio hanno 3 lits separati non tutti in una lista? – rose

+0

Che differenza fa? Supponendo che 'Z <- apply (M, 2, as.list)' puoi accedere agli elenchi usando 'Z [[1]]', 'Z [[2]]', 'Z [[3]]'. Anche 'Z [[" c1 "]]', 'Z [[" c2 "]]', 'Z [[" c3 "]]' se la matrice aveva nomi di colonne. – flodel

+0

Se 'MM' è il risultato di' apply', allora 'MM [, 1] $ a' restituisce un errore in modo che non risponda alla domanda indicata (che consisteva nel creare una matrice/lista tale che quell'espressione funzioni). –

2

Ecco il comando:

list.m <- as.list(m[,1]) 
2

Prova questa:

# input matrix 
m <- matrix(1:6, 2, dimnames = list(c("a", "b"), NULL)) 

# convert it to a list constructed such that L[, 1]$a gives 1 
L <- as.list(m) 
dim(L) <- dim(m) 
dimnames(L) <- dimnames(m) 

Ora abbiamo:

> L[, 1]$a 
[1] 1 
Problemi correlati