mit Matrizen
Wir können über eine Matrix genau so schleifen wie wir es beim Vektor getan haben.
## Erstelle eine 3x3 Matrix mit den Werten von 1 bis 9
my_matrix <- matrix(1:9, nrow=3, ncol=3)
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
for (i in my_matrix) {
print(i)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
Obwohl eine Matrix zwei-dimensional ist, kann man es auch als ein Vektor repräsentieren und das ist auch was im Hintergrund passiert, weswegen wir syntaktisch auf nichts achten müssen.
Wie man auch an dem Output der Schleife erkennen kann, wenn man über eine Matrix schleift, dann geht man von Spalte zu Spalte bis man durch die ganze Matrix durchgeschleift ist.
Wir können aber auch Zeile für Zeile und
jeweils bei jeder Zeile über alle Spalte gehen.
Dies ist ein bisschen komplizierter, denn hierfür müssen wir zwei for Schleifen
ineinander schreiben:
## Eine 3x3 Matrix
my_matrix <- matrix(1:9, nrow=3, ncol=3)
## Die erste `for` Schleife geht über die Zeilen
for (row in 1:nrow(my_matrix)) {
## Die zweite `for` Schleife geht für die jeweilige Zeile über alle Spalten
for (col in 1:ncol(my_matrix)) {
## Gebe in alle wichtigen Information in der Konsole aus
print(paste('Row', row, 'col', col, 'value', my_matrix[row, col]))
}
}
[1] "Row 1 col 1 value 1"
[1] "Row 1 col 2 value 4"
[1] "Row 1 col 3 value 7"
[1] "Row 2 col 1 value 2"
[1] "Row 2 col 2 value 5"
[1] "Row 2 col 3 value 8"
[1] "Row 3 col 1 value 3"
[1] "Row 3 col 2 value 6"
[1] "Row 3 col 3 value 9"
In der ersten Schleife for (row in 1:nrow(my_matrix)) { ... } gehen wir
über alle Zeilen der Matrix. nrow(my_matrix) gibt die Anzahl der Zeilen zurück,
also in diesem Fall 3.
Der Ausdruck 1:nrow(my_matrix) erzeugt eine Sequenz von 1 bis 3.
Die zweite Schleife for (col in 1:ncol(my_matrix)) { ... } geht über alle Spalten der Matrix.
Ähnlich wie zuvor gibt ncol(my_matrix) die Anzahl der Spalten zurück
und 1:ncol(my_matrix) erzeugt wieder eine Sequenz von 1 bis 3.
print(paste('Row', row, 'col', col, 'value', my_matrix[row, col])) wird für jede Zelle
in der Matrix ausgeführt.
paste ist eine Funktion, die mehrere Zeichenketten zu einer einzigen Zeichenkette verbindet.
In diesem Fall werden die Zeichenketten 'Row', der Wert von row, 'col',
der Wert von col und 'value' und der Wert in der Matrixzelle
my_matrix[row, col] als String zusammengefügt und dann mit print ausgegeben.