2013-10-12 5 views
6

Ich möchte eine Liste mit M 3 mal 3 Matrizen deklarieren. Wenn ich die Zahl M im Voraus wusste, dann kann ich eine solche Liste, erklären:R: Wie deklariere ich ein Listenobjekt mit M Elementen

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

Dieses Verfahren umständlich wird, wenn M groß ist. Was noch schlimmer ist, diese Methode funktioniert nicht, wenn ich den Wert von M nicht im Voraus kenne. Wenn ich einen Vektor der Länge M erklären will, kann ich es tun, indem Berufung:

myVec <- rep(NA,M) 

auch wenn ich im Voraus, um den Wert von M nicht kennen. Gibt es eine ähnliche Möglichkeit, eine Liste der Größe M zu deklarieren?

Danke

Antwort

5

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

Versuchen Sie, die, für S = 3,

[[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 

Durch die Art und Weise gibt, identical(matrix(NA,3,3),matrix(,3,3)) ist wahr, da Matrizen standardmäßig auf NA initialisiert werden. Siehe ?matrix.

+1

Wenn Ihre Matrizen nicht identisch sind, wird die Antwort von alexis_laz nützlicher sein: (1) initialisiere eine Liste der korrekten Länge und dann (2) ordne sie mit 'mylist [[i]]' zu. – Frank

+1

Danke! Das ist was ich wollte! – ThePrincess

12

Vielleicht:

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

+0

Das ist gut, um eine Liste der Größe S zu deklarieren. Aber ich möchte eine Liste mit S 3 mal 3 Matrix deklarieren, so dass ich später in meinem Code ein (j, k) th Element des I^th nennen kann 3 mal 3 Matrix der Liste von: myls [[i]] [j, k] – ThePrincess

+0

Probieren Sie 'für (i in 1: Länge (myls)) {myls [[i]] <- elm}; myls –

Verwandte Themen