Matrixfunctie in R: creëren, afdrukken, kolom en segment toevoegen
⚡ Slimme samenvatting
Een matrix in R is een tweedimensionale array die één gegevenstype bevat, verdeeld over m rijen en n kolommen. Deze arrays worden gemaakt met `matrix()`, uitgebreid met `cbind()` en `rbind()`, en toegankelijk via vierkante haken.

Matrixfunctie in R
Een matrixfunctie in R is een tweedimensionale array met m aantal rijen en n aantal kolommen. Met andere woorden: matrix in R-programmering is een combinatie van twee of meer vectoren met hetzelfde gegevenstype.
In essentie is een matrix niets meer dan een vector met een `dim` attribuut van lengte twee. Daarom moet elk element hetzelfde type hebben: zodra een tekenwaarde aan getallen wordt gekoppeld, wordt de hele matrix geconverteerd naar een teken. R slaat de waarden op in één enkele kolom en gebruikt `dim` om te bepalen waar elke rij eindigt, dus de keuze van data type Dit geldt voor het hele object tegelijk.
Let op: De functie `matrix()` retourneert altijd precies twee dimensies. Om een structuur met drie of meer dimensies in R te bouwen, gebruikt u `array()` met een vector van dimensies, of wijst u `dim()` rechtstreeks toe. Het onderstaande diagram toont de rij- en kolomindeling die elke matrix volgt.
Hoe maak je een matrix in R
We kunnen een matrix maken met de functie Matrix()De standaard R-signatuur accepteert vijf argumenten, waarvan de drie meest gebruikte hieronder worden weergegeven:
matrix(data, nrow, ncol, byrow = FALSE)
Argumenten:
- gegevens: De verzameling elementen die R in de rijen en kolommen van de matrix zal rangschikken.
- nu: Aantal rijen.
- NcoI: Aantal kolommen.
- bijrij: Een logische vlag. Met de standaardwaarde byrow = FALSE wordt de matrix kolom voor kolom van boven naar beneden gevuld. Met byrow = TRUE wordt deze rij voor rij van links naar rechts gevuld.
- dimnamen: Een optionele lijst van twee elementen met de rijnamen en kolomnamen.
Twee details uit de basisreferentie van R zijn het vermelden waard voordat we met het eerste voorbeeld beginnen. Als slechts één van de waarden voor nrow of ncol is opgegeven, leidt R de andere af uit de lengte van de data. En als de data te weinig elementen bevat om de gevraagde vorm te vullen, worden de waarden hergebruikt in plaats van afgewezen.
Laten we twee 5×2 matrices maken van de getallenreeks 1 tot en met 10, één met byrow = TRUE en één met byrow = FALSE, om het verschil te zien.
# 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
Output:
Omdat byrow = TRUE is gebruikt, vult de console de eerste rij met 1 en 2, de tweede rij met 3 en 4, enzovoort.
Print de dimensie van matrix_a met dim().
Laten we nu de dimensie van de matrix in R afdrukken met dim(). De syntaxis om matrix in R af te drukken met dim() is:
# Print dimension of the matrix with dim()
dim(matrix_a)
Output:
## [1] 5 2
dim() retourneert eerst het aantal rijen en vervolgens het aantal kolommen, wat de 5×2-vorm bevestigt.
Vul een matrix per kolom met byrow = FALSE
Dezelfde tien getallen en hetzelfde aantal rijen leveren een andere opstelling op zodra de vulrichting verandert. Keeping Standaard stuurt byrow de waarden door naar de eerste kolom voordat de tweede begint.
# 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
Output:
Print de dimensie van matrix_b met dim().
Druk opnieuw de dimensie van de matrix af met dim(). Hieronder vindt u een syntaxis van de R-afdrukmatrixdimensie:
# Print dimension of the matrix with dim()
dim(matrix_b)
Output:
## [1] 5 2
De vorm blijft onveranderd bij 5×2, omdat byrow de volgorde van de vulling verandert en nooit de afmetingen.
NoteHet gebruik van de opdracht matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) heeft hetzelfde effect als hierboven, aangezien R nrow = 5 afleidt uit de tien opgegeven waarden.
Je kunt ook een 4×3 matrix maken met ncol. R maakt dan 3 kolommen aan en vult elke kolom van boven naar beneden. Bekijk een voorbeeld.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
Output:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
De kolomkoppen [,1] tot [,3] en de rijlabels [1,] tot [4,] zijn standaard placeholders van R. Ze verdwijnen zodra er echte dimensienamen worden ingevoerd, zoals later in deze handleiding wordt getoond.
Voorbeeld:
dim(matrix_c)
Output:
## [1] 4 3
Voeg een kolom toe aan een matrix met de cbind()
Je kunt een kolom toevoegen aan een matrix in R met het commando `cbind()`. `cbind()` staat voor kolomkoppeling en kan zoveel matrices of kolommen samenvoegen als je opgeeft. In ons vorige voorbeeld maakten we bijvoorbeeld een 5×2 matrix. We voegen een derde kolom toe en controleren of de dimensie 5×3 is.
Voorbeeld:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
Output:
## [1] 5 3
Voorbeeld:
matrix_a1
uitgang
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Voorbeeld:
We kunnen ook meerdere kolommen tegelijk binden. Het volgende blok bouwt matrix_a2, een 4×3 matrix met de getallen 13 tot en met 24, zodat deze kan worden samengevoegd met de 4×3 matrix_c om een 4×6 resultaat te produceren dat de getallen 1 tot en met 24 omvat.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
Output:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Voorbeeld:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
Output:
## [1] 4 6
NOTITIEHet aantal rijen van de matrices in R moet gelijk zijn wil cbind() werken. Als ze verschillen, hergebruikt R ofwel de matrices met het kleinste aantal rijen, ofwel geeft een foutmelding. Het is daarom veiliger om eerst dim() op beide objecten te controleren.
Waar cbind() kolommen samenvoegt, voegt rbind() rijen toe. Laten we één rij toevoegen aan onze matrix_c en controleren of de dimensie 5×3 is.
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)
Output:
## [1] 5 3
Merk op dat het binden van een benoemde vector, zoals add_row, de nieuwe rij ook die naam geeft. Dit is de eerste stap naar de gelabelde matrices die verderop aan bod komen.
Snijd een matrix
We kunnen één of meerdere elementen uit een matrix selecteren in R programmeren Door gebruik te maken van vierkante haken [ ]. Binnen de haken komt de rijselector eerst en de kolomselector daarna, gescheiden door een komma. Dit is waar slicing in beeld komt.
Bijvoorbeeld:
- matrix_c[1,2] selecteert het element in de eerste rij en tweede kolom.
- matrix_c[1:3,2:3] resulteert in een R-slice-matrix met de gegevens op de rijen 1, 2, 3 en kolommen 2 en 3.
- matrix_c[,1] selecteert alle elementen van de eerste kolom.
- matrix_c[1,] selecteert alle elementen van de eerste rij.
Als je een kant van de komma leeg laat, betekent dit dat elke waarde aan die kant wordt meegenomen. Een gevolg hiervan is dat beginners vaak over het hoofd zien: wanneer een enkele rij of kolom wordt geselecteerd, verwijdert R de lege dimensie en geeft een gewone vector terug. Door drop = FALSE toe te voegen, zoals in matrix_c[1, , drop = FALSE], blijft het resultaat een matrix.
Hier is de uitvoer die u krijgt voor de bovenstaande codes
Benoem de rijen en kolommen van een matrix in R.
Standaardlabels zoals [,1] en [3,] maken de uitvoer moeilijk leesbaar zodra een matrix daadwerkelijk betekenis heeft. Het argument dimnames, en de vervangingsfuncties rownames() en colnames(), voegen tekstlabels toe die vervolgens met de matrix meereizen tijdens cbind(), t() en elke slice-bewerking.
# 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']
| Functie | leest | Sets |
|---|---|---|
| dimnames(m) | Beide dimensies als een lijst van twee vectoren | dimnames(m) <- list(rijen, kolommen) |
| rijnamen(m) | De rijlabels | rijnamen(m) <- rijen |
| kolomnamen(m) | De kolomlabels | colnames(m) <- cols |
| dim(m) | Rijen en kolommen als twee gehele getallen | dim(m) <- c(nrow, ncol) |
Zodra de labels bestaan, is sales['north', 'q2'] veel duidelijker dan sales[1, 2] en blijft het behouden na het herschikken van de rijen. Door een dimnames-component op NULL te zetten, wordt die set labels weer verwijderd, en een matrix die is geconverteerd met as.data.frame() behoudt de rij- en kolomnamen direct in de matrix. dataframe.
Matrix OperaFuncties in R: Rekenen, Transponeren en Vermenigvuldigen
Rekenen met matrices is waar de regel van één type echt van pas komt. Standaard R kan de hele set aan zonder extra pakket, maar twee operatoren worden gemakkelijk door elkaar gehaald: * vermenigvuldigt element voor element, terwijl %*% echte matrixvermenigvuldiging uitvoert en vereist dat de kolommen van de linker operand overeenkomen met de rijen van de rechter.
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): Transponeert de matrix, zodat element [i, j] [j, i] wordt. Dimnames worden overgenomen.
- oplossen(m): Retourneert de inverse van een vierkante, niet-singuliere matrix, en solve(a, b) lost een lineair stelsel op.
- rijSommen / kolomSommen / rijGemiddelden / kolomGemiddelden: Gedocumenteerd als equivalent aan apply() met sum of mean, maar aanzienlijk sneller.
- apply(m, MARGIN, FUN): MARGIN = 1 doorloopt de rijen en MARGIN = 2 doorloopt de kolommen, voor elke functie die je opgeeft.
- diag, det, crossprod: Diagonaal, determinant en de snellere vorm van t(x) %*% y.
Omdat deze bewerkingen gevectoriseerd zijn, vervangen ze lussen in plaats van erin te zitten. Een samenvatting die normaal gesproken een geneste for-lus over duizenden cellen zou vereisen, wordt nu een enkele aanroep van colMeans(), wat van belang is zodra de data groeit.
Matrix versus DataFrame versus Array in R
Matrices, dataframes en arrays zien er in de console allemaal rechthoekig uit, maar ze beantwoorden verschillende vragen. De tabel zet ze naast elkaar.
| Eigendom | Matrix | Data frame | reeks |
|---|---|---|---|
| Afmetingen | Precies 2 | Precies 2 | Elk nummer |
| Kolomtypen | Eén type voor het hele object | Een ander type per kolom | Eén type voor het hele object |
| Gebouwd met | Matrix() | data.frame() | reeks() |
| Typisch gebruik | Numerieke berekeningen en lineaire algebra | Gemengde observatiegegevens | Gestapelde tabellen, zoals tellingen per jaar. |
| Rijlabels | Optionele dimnamen | Rijnamen altijd aanwezig | Optionele dimnamen |
# 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')
Pak een matrix erbij als elke cel hetzelfde soort getal bevat en het werk rekenkundig is. Pak een dataframe wanneer kolommen verschillende gegevenstypen bevatten, bijvoorbeeld een tekenreeksnaam naast een numerieke prijs en een factor. Pak een lijst Dit is handig wanneer de onderdelen verschillende lengtes hebben, en bij een array wanneer een derde index, zoals tijd of regio, daadwerkelijk bestaat. Conversie in beide richtingen is goedkoop met as.matrix() en as.data.frame(), waardoor de structuur de taak kan volgen in plaats van andersom.




