2013-10-12 12 views
6

Voglio dichiarare una lista contenente M 3 di 3 matrici. Se conoscessi il numero M in anticipo, allora posso dichiarare tale elenco da:R: come dichiarare l'oggetto lista con elementi M

elm <- matrix(NA,3,3) 
## Say M = 7 
myList <- list(elm,elm,elm,elm,elm,elm,elm) 

Questo metodo diventa ingombrante se M è grande. Quel che è peggio, questo metodo non funziona se non conosco il valore di M in anticipo. Se voglio dichiarare un vettore di lunghezza M, posso farlo da vocazione:

myVec <- rep(NA,M) 

anche se non so il valore di M in anticipo. C'è un modo simile per dichiarare un elenco di dimensioni M?

Grazie

risposta

5

Prova

mylist <- rep(list(elm),7) 

che, per S = 3, dà

[[1]] 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

[[2]] 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

[[3]] 
    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 
[3,] NA NA NA 

Tra l'altro, identical(matrix(NA,3,3),matrix(,3,3)) è vero, poiché le matrici sono inizializzate su NA per impostazione predefinita. Vedi ?matrix.

+1

Se le tue matrici non sono identiche, la risposta di alexis_laz sarà più utile: (1) inizializza una lista della lunghezza corretta e poi (2) assegna ad essa con 'mylist [[i]]'. – Frank

+1

Grazie! Questo è quello che volevo! – ThePrincess

12

Forse questo:

myls <- vector("list", length = S)

+0

Questo è buono per dichiarare un elenco di dimensioni S. Ma voglio dichiarare una lista contenente S 3 per 3 matrice in modo che, più avanti nel mio codice, possa chiamare un elemento (j, k) th del i^th 3 per 3 matrice della lista di: myls [[i]] [j, k] – ThePrincess

+0

Prova 'for (i in 1: length (myls)) {myls [[i]] <- elm}; myls' –

Problemi correlati