Matrixfunktion in R: Erstellen, Drucken, Hinzufügen von Spalten und Segmenten
⚡ Intelligente Zusammenfassung
Eine Matrix in R ist ein zweidimensionales Array, das einen einzigen Datentyp über m Zeilen und n Spalten enthält. Sie wird mit matrix() erstellt, mit cbind() und rbind() erweitert und über eckige Klammern aufgerufen.

Matrixfunktion in R
Eine Matrixfunktion in R ist ein zweidimensionales Array mit m Zeilen und n Spalten. Mit anderen Worten: Eine Matrix in der R-Programmierung ist eine Kombination aus zwei oder mehr Vektoren mit demselben Datentyp.
Im Grunde ist eine Matrix ein Vektor mit einem zweidimensionalen `dim`-Attribut. Deshalb müssen alle Elemente denselben Datentyp haben: Sobald ein Zeichenwert auf eine Zahl trifft, wird die gesamte Matrix in einen Zeichenwert umgewandelt. R speichert die Werte spaltenweise und verwendet `dim`, um das Zeilenende festzulegen. Datentyp gilt für das gesamte Objekt auf einmal.
Hinweis: Die Funktion `matrix()` liefert immer genau zwei Dimensionen. Um in R eine Struktur mit drei oder mehr Dimensionen zu erstellen, verwenden Sie `array()` mit einem Dimensionsvektor oder weisen Sie `dim()` den Wert direkt zu. Das folgende Diagramm zeigt das Zeilen- und Spaltenlayout, dem jede Matrix folgt.
So erstellen Sie eine Matrix in R
Wir können mit der Funktion eine Matrix erstellen. Matrix()Die Basissignatur von R benötigt fünf Argumente, von denen die drei am häufigsten verwendeten hier aufgeführt sind:
matrix(data, nrow, ncol, byrow = FALSE)
Argumente:
- frustriertenDie Menge der Elemente, die R in den Zeilen und Spalten der Matrix anordnet.
- jetzt: Anzahl der Zeilen.
- ncol: Anzahl der Spalten.
- byrowEin logischer Parameter. Bei der Standardeinstellung byrow = FALSE wird die Matrix spaltenweise von oben nach unten gefüllt. Bei byrow = TRUE wird sie zeilenweise von links nach rechts gefüllt.
- DimensionsnamenEine optionale Liste der Länge zwei, die die Zeilennamen und Spaltennamen angibt.
Zwei Details aus der R-Referenz sind vor dem ersten Beispiel wichtig. Wenn nur eine der beiden Variablen `nrow` oder `ncol` angegeben ist, leitet R die andere aus der Datenlänge ab. Und wenn die Daten zu wenige Elemente enthalten, um die gewünschte Form zu erreichen, werden die Werte wiederverwendet, anstatt verworfen zu werden.
Um den Unterschied zu sehen, konstruieren wir zwei 5×2-Matrizen aus der Zahlenfolge von 1 bis 10, eine mit byrow = TRUE und eine mit byrow = FALSE.
# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow = TRUE matrix_a <-matrix(1:10, byrow = TRUE, nrow = 5) matrix_a
Ausgang:
Da byrow = TRUE verwendet wurde, füllt die Konsole die erste Zeile mit 1 und 2, die zweite Zeile mit 3 und 4 usw.
Gib die Dimension von matrix_a mit dim() aus.
Lassen Sie uns nun die Dimension der Matrix in R mit dim() drucken. Die Syntax zum Drucken einer Matrix in R mit dim() lautet:
# Print dimension of the matrix with dim()
dim(matrix_a)
Ausgang:
## [1] 5 2
dim() gibt zuerst die Zeilenanzahl und dann die Spaltenanzahl zurück und bestätigt damit die 5×2-Form.
Eine Matrix spaltenweise füllen mit byrow = FALSE
Die gleichen zehn Zahlen und die gleiche Zeilenanzahl ergeben eine andere Anordnung, sobald die Füllrichtung geändert wird. Keeping Die Standardeinstellung von byrow sendet die Werte in die erste Spalte, bevor die zweite Spalte beginnt.
# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow = FALSE matrix_b <-matrix(1:10, byrow = FALSE, nrow = 5) matrix_b
Ausgang:
Gib die Dimension von matrix_b mit dim() aus.
Drucken Sie erneut die Dimension der Matrix mit dim() aus. Nachfolgend finden Sie eine Syntax der R-Druckmatrixdimension:
# Print dimension of the matrix with dim()
dim(matrix_b)
Ausgang:
## [1] 5 2
Die Form bleibt bei 5×2 unverändert, da byrow die Füllreihenfolge ändert, niemals aber die Abmessungen.
HinweisDie Verwendung des Befehls matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) hat den gleichen Effekt wie oben, da R aus den zehn angegebenen Werten nrow = 5 ableitet.
Sie können auch eine 4×3-Matrix mit ncol erstellen. R erstellt dann drei Spalten und füllt jede Spalte von oben nach unten. Sehen Sie sich ein Beispiel an.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
Ausgang:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
Die Spaltenüberschriften [,1] bis [,3] und die Zeilenbeschriftungen [1,] bis [4,] sind Standardplatzhalter in R. Sie verschwinden, sobald echte Dimensionsnamen angegeben werden, wie später in diesem Tutorial gezeigt wird.
Ejemplo:
dim(matrix_c)
Ausgang:
## [1] 4 3
Mit cbind() eine Spalte zu einer Matrix hinzufügen
Mit dem Befehl `cbind()` können Sie einer Matrix in R Spalten hinzufügen. `cbind()` bedeutet Spaltenverknüpfung und kann beliebig viele Matrizen oder Spalten verketten. In unserem vorherigen Beispiel wurde eine 5×2-Matrix erstellt. Wir fügen eine dritte Spalte hinzu und überprüfen, ob die Dimension nun 5×3 beträgt.
Ejemplo:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
Ausgang:
## [1] 5 3
Ejemplo:
matrix_a1
Ausgang
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Ejemplo:
Wir können auch mehrere Spalten gleichzeitig verknüpfen. Der nächste Block erstellt die Matrix_a2, eine 4×3-Matrix mit den Zahlen 13 bis 24, die dann mit der 4×3-Matrix_c zu einer 4×6-Matrix verknüpft wird, die die Zahlen von 1 bis 24 abdeckt.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
Ausgang:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Ejemplo:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
Ausgang:
## [1] 4 6
HINWEISDie Matrizen in R müssen die gleiche Zeilenanzahl haben, damit `cbind()` funktioniert. Bei einer Abweichung verwendet R entweder die kürzere Eingabe erneut oder löst einen Fehler aus. Daher ist es sicherer, zuerst `dim()` für beide Objekte zu verwenden.
Während `cbind()` Spalten verkettet, fügt `rbind()` Zeilen an. Fügen wir unserer Matrix `matrix_c` eine Zeile hinzu und überprüfen wir, ob die Dimension 5×3 beträgt.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3) # Create a vector of 3 columns add_row <- c(1:3) # Append to the matrix matrix_c <- rbind(matrix_c, add_row) # Check the dimension dim(matrix_c)
Ausgang:
## [1] 5 3
Beachten Sie, dass durch das Binden eines benannten Vektors wie add_row auch die neue Zeile diesen Namen erhält. Dies ist der erste Schritt hin zu den weiter unten behandelten beschrifteten Matrizen.
Schneiden Sie eine Matrix
Wir können ein oder mehrere Elemente aus einer Matrix auswählen. R Programmierung Mithilfe der eckigen Klammern [ ] wird die Zeilenauswahl durch ein Komma getrennt, gefolgt von der Spaltenauswahl. Hier kommt das Slicing ins Spiel.
Beispielsweise:
- matrix_c[1,2] wählt das Element in der ersten Zeile und zweiten Spalte aus.
- matrix_c[1:3,2:3] ist eine R-Slice-Matrix, deren Daten sich in den Zeilen 1, 2, 3 und den Spalten 2 und 3 befinden.
- matrix_c[,1] wählt alle Elemente der ersten Spalte aus.
- matrix_c[1,] wählt alle Elemente der ersten Zeile aus.
Lässt man eine Seite des Kommas leer, bedeutet das, dass alle Werte auf dieser Seite berücksichtigt werden. Anfänger werden dabei oft getäuscht: Wählt man eine einzelne Zeile oder Spalte aus, entfernt R die leere Dimension und gibt einen einfachen Vektor zurück. Mit `drop = FALSE`, wie in `matrix_c[1, , drop = FALSE]`, bleibt das Ergebnis eine Matrix.
Hier ist die Ausgabe, die Sie für die oben genannten Codes erhalten
Benennen Sie die Zeilen und Spalten einer Matrix in R
Standardmäßige Bezeichnungen wie [,1] und [3,] erschweren die Lesbarkeit der Ausgabe, sobald eine Matrix eine tatsächliche Bedeutung hat. Das Argument `dimnames` sowie die Ersatzfunktionen `rownames()` und `colnames()` fügen Textbezeichnungen hinzu, die dann bei der Matrixverarbeitung durch `cbind()`, `t()` und jede Slicing-Operation erhalten bleiben.
# Name the rows and columns while the matrix is built sales <- matrix(1:6, nrow = 2, ncol = 3, dimnames = list(c('north', 'south'), c('q1', 'q2', 'q3'))) # Or attach the names afterwards rownames(sales) <- c('north', 'south') colnames(sales) <- c('q1', 'q2', 'q3') # Read the names back as a list of two character vectors dimnames(sales) # Names make label based slicing possible sales['north', 'q2']
| Funktion | Liest | Sets |
|---|---|---|
| dimnames(m) | Beide Dimensionen als Liste von zwei Vektoren | dimnames(m) <- list(rows, cols) |
| Zeilennamen(m) | Die Zeilenbeschriftungen | rownames(m) <- rows |
| Spaltennamen(m) | Die Spaltenbezeichnungen | colnames(m) <- cols |
| dim(m) | Zeilen und Spalten als zwei ganze Zahlen | dim(m) <- c(nrow, ncol) |
Sobald die Bezeichnungen vorhanden sind, ist sales['north', 'q2'] deutlich verständlicher als sales[1, 2] und bleibt auch nach einer Neuanordnung der Zeilen erhalten. Setzt man die Komponente dimnames auf NULL, werden diese Bezeichnungen wieder entfernt, und eine mit as.data.frame() konvertierte Matrix übernimmt ihre Zeilen- und Spaltennamen direkt. Datenrahmen.
Matrix OperaGrundlagen in R: Arithmetik, Transponieren und Multiplizieren
Bei der Arithmetik mit Matrizen zahlt sich die Ein-Typ-Regel aus. R-Basis unterstützt alle Operationen ohne zusätzliche Pakete, doch zwei Operatoren können leicht verwechselt werden: * multipliziert Elemente miteinander, während %*% eine echte Matrixmultiplikation durchführt und voraussetzt, dass die Spalten des linken Operanden mit den Zeilen des rechten übereinstimmen.
m1 <- matrix(1:4, nrow = 2) m2 <- matrix(5:8, nrow = 2) m1 + m2 # element by element addition m1 * m2 # element by element product, NOT matrix multiplication m1 %*% m2 # true matrix multiplication t(m1) # transpose: rows become columns solve(m1) # inverse, for a square matrix that is not singular rowSums(m1) # one total per row colMeans(m1) # one mean per column apply(m1, 1, max) # any function, applied row by row
- t(m)Die Matrix wird transponiert, sodass das Element [i, j] zu [j, i] wird. Die Dimensionsnamen werden übernommen.
- solve(m)Gibt die Inverse einer quadratischen, nicht-singulären Matrix zurück, und solve(a, b) löst ein lineares Gleichungssystem.
- Zeilensummen / Spaltensummen / Zeilenmittelwerte / Spaltenmittelwerte: Dokumentiert als gleichwertig zu apply() mit sum oder mean, aber wesentlich schneller.
- apply(m, MARGIN, FUN): MARGIN = 1 durchläuft die Zeilen und MARGIN = 2 durchläuft die Spalten, für jede von Ihnen angegebene Funktion.
- Diagnose, Detektion, Kreuzprodukt: Diagonale, Determinante und die schnellere Form von t(x) %*% y.
Da diese Operationen vektorisiert sind, ersetzen sie Schleifen, anstatt in ihnen enthalten zu sein. Eine Zusammenfassung, die normalerweise eine verschachtelte for-Schleife über Tausende von Zellen benötigen würde, wird zu einem einzigen Aufruf von colMeans(), was sich insbesondere bei wachsenden Datenmengen bemerkbar macht.
Matrix vs. Data Frame vs. Array in R
Matrizen, Dataframes und Arrays sehen in der Konsole alle rechteckig aus, beantworten aber unterschiedliche Fragen. Die Tabelle stellt sie nebeneinander dar.
| Eigenschaft | Matrix | Datenrahmen | Feld |
|---|---|---|---|
| Abmessungen | Genau 2 | Genau 2 | Irgendeine Nummer |
| Spaltentypen | Ein Typ für das gesamte Objekt | Ein anderer Typ pro Spalte | Ein Typ für das gesamte Objekt |
| Design mit | Matrix() | data.frame() | array () |
| Typische Verwendung | Numerische Berechnungen und lineare Algebra | Gemischte Beobachtungsdaten | Gestapelte Tabellen, wie z. B. Zählungen nach Jahr |
| Zeilenbeschriftungen | Optionale Dimensionsnamen | Zeilennamen sind immer vorhanden | Optionale Dimensionsnamen |
# A matrix holds one type only, so mixing coerces everything to character mixed <- matrix(c(1, 2, 'a', 'b'), nrow = 2) class(mixed[1, 1]) # Convert between the structures as.data.frame(matrix_c) as.matrix(mtcars) # A matrix is the two dimensional case of an array is.matrix(matrix_c) inherits(matrix_c, 'array')
Verwenden Sie eine Matrix, wenn alle Zellen Zahlen desselben Typs enthalten und es sich um arithmetische Berechnungen handelt. Datenrahmen wenn Spalten unterschiedliche Datentypen enthalten, zum Beispiel einen Zeichennamen neben einem numerischen Preis und einem FaktorGreifen Sie nach einem Liste Wenn die Teile unterschiedliche Längen haben und bei einem Array ein dritter Index wie Zeit oder Region tatsächlich existiert, ist die Konvertierung mit `as.matrix()` und `as.data.frame()` in beide Richtungen effizient. Daher kann die Struktur der Aufgabe folgen und nicht umgekehrt.




