Matrisefunksjon i R: Opprett, skriv ut, legg til kolonne og del
⚡ Smart oppsummering
Matrise i R er en todimensjonal matrise som inneholder én datatype på tvers av m rader og n kolonner, bygget med matrix(), utvidet med cbind() og rbind(), og nås gjennom hakeparenteser.

Matrisefunksjon i R
En matrisefunksjon i R er en 2-dimensjonal matrise som har m antall rader og n antall kolonner. Matrise i R-programmering er med andre ord en kombinasjon av to eller flere vektorer med samme datatype.
Under er en matrise rett og slett en vektor som bærer et dim-attributt med lengde to. Det er derfor hvert element må dele én type: i det øyeblikket en tegnverdi kobler sammen tall, tvinges hele matrisen til tegn. R lagrer verdiene i en enkelt kolonnevis kjøring og bruker dim til å bestemme hvor hver rad slutter, slik at valget av data-type gjelder hele objektet samtidig.
OBS: matrix() returnerer alltid nøyaktig to dimensjoner. For å bygge en struktur med tre eller flere dimensjoner i R, bruk array() med en dim-vektor, eller tilordne dim() direkte. Diagrammet nedenfor viser rad- og kolonneoppsettet som hver matrise følger.
Hvordan lage en matrise i R
Vi kan lage en matrise med funksjonen matrise()Den grunnleggende R-signaturen tar fem argumenter, og de tre som brukes oftest vises her:
matrix(data, nrow, ncol, byrow = FALSE)
argumenter:
- dato: Samlingen av elementer som R vil ordne i radene og kolonnene i matrisen.
- innskrenkeAntall rader.
- ncolAntall kolonner.
- byrowEt logisk flagg. Med standardverdien byrow = FALSE fylles matrisen kolonne for kolonne, topp til bunn. Med byrow = TRUE fylles den rad for rad, fra venstre til høyre.
- dimnavnEn valgfri liste med lengde to som oppgir radnavnene og kolonnenavnene.
To detaljer fra den grunnleggende R-referansen er verdt å vite før det første eksemplet. Hvis bare én av nrow og ncol er gitt, utleder R den andre fra datalengden. Og hvis dataene inneholder for få elementer til å fylle formen du ba om, blir verdiene resirkulert i stedet for å bli avvist.
La oss konstruere to 5×2-matriser fra tallrekken 1 til 10, én med byrow = TRUE og én med byrow = FALSE, for å se forskjellen.
# 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
Utgang:
Fordi byrow = TRUE ble brukt, fyller konsollen den første raden med 1 og 2, den andre raden med 3 og 4, og så videre.
Skriv ut dimensjonen til matrix_a med dim()
La oss nå skrive ut dimensjonen til matrisen i R med dim(). Syntaksen for å skrive ut matrise i R ved å bruke dim() er:
# Print dimension of the matrix with dim()
dim(matrix_a)
Utgang:
## [1] 5 2
dim() returnerer radantallet først og kolonneantallet deretter, og bekrefter dermed 5×2-formen.
Fyll en matrise etter kolonne med byrow = FALSE
De samme ti tallene og samme tallet produserer et annet arrangement når fyllingsretningen endres.ping byrow sender som standard verdiene nedover den første kolonnen før den andre starter.
# 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
Utgang:
Skriv ut dimensjonen til matrix_b med dim()
Igjen, skriv ut dimensjonen til matrisen ved å bruke dim(). Nedenfor er en syntaks for R utskriftsmatrisedimensjon:
# Print dimension of the matrix with dim()
dim(matrix_b)
Utgang:
## [1] 5 2
Formen er uendret ved 5×2, fordi byrow endrer fyllingsrekkefølgen og aldri dimensjonene.
MerknaderBruk av kommandoen matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) vil ha samme effekt som ovenfor, siden R utleder nrow = 5 fra de ti verdiene som er oppgitt.
Du kan også lage en 4×3-matrise ved hjelp av ncol. R vil lage 3 kolonner og fylle hver kolonne ovenfra og ned. Se et eksempel.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
Utgang:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
Kolonneoverskriftene [,1] til [,3] og radetikettene [1,] til [4,] er standard plassholdere for R. De forsvinner så snart ekte dimnames er oppgitt, som vist senere i denne veiledningen.
Eksempel:
dim(matrix_c)
Utgang:
## [1] 4 3
Legg til en kolonne til en matrise med cbind()
Du kan legge til en kolonne i matrise R med cbind()-kommandoen. cbind() betyr kolonnebinding, og den kan sammenkoble så mange matriser eller kolonner som spesifisert. For eksempel opprettet vårt forrige eksempel en 5×2-matrise. Vi sammenkobler en tredje kolonne og bekrefter at dimensjonen er 5×3.
Eksempel:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
Utgang:
## [1] 5 3
Eksempel:
matrix_a1
Produksjon
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Eksempel:
Vi kan også binde mer enn én kolonne om gangen. Den neste blokken bygger matrix_a2, en 4×3-matrise som inneholder tallene 13 til 24, slik at den kan kobles til 4×3-matrisen_c for å produsere et 4×6-resultat som dekker 1 til 24.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
Utgang:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Eksempel:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
Utgang:
## [1] 4 6
MERKNADERAntall rader i matrisene i R må være likt for at cbind() skal fungere. Når de er forskjellige, resirkulerer R enten den kortere inputen eller genererer en feil, så det er tryggere å sjekke dim() på begge objektene først.
Der cbind() sammenkobler kolonner, legger rbind() til rader. La oss legge til én rad i matrisen matrix_c og bekrefte at dimensjonen er 5×3.
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)
Utgang:
## [1] 5 3
Legg merke til at binding av en navngitt vektor, som add_row, også gir den nye raden det navnet, som er det første steget mot de merkede matrisene som dekkes lenger ned.
Skjær en matrise
Vi kan velge ett eller flere elementer fra en matrise i R programmering ved å bruke hakeparentesene []. Innenfor parentesene kommer radvelgeren først og kolonnevelgeren deretter, atskilt med komma. Det er her slicing kommer inn i bildet.
For eksempel:
- matrix_c[1,2] velger elementet i første rad og andre kolonne.
- matrix_c[1:3,2:3] resulterer i en R-seksjonsmatrise med dataene på rad 1, 2, 3 og kolonne 2 og 3.
- matrix_c[,1] velger alle elementene i den første kolonnen.
- matrix_c[1,] velger alle elementene i den første raden.
Å la en side av kommaet stå tom betyr derfor at alle verdier på den siden er tomme. Én konsekvens avslører nybegynnere: når en enkelt rad eller kolonne velges, fjerner R den tomme dimensjonen og gir tilbake en ren vektor. Ved å legge til drop = FALSE, som i matrix_c[1, , drop = FALSE], beholdes resultatet som en matrise.
Her er utgangen du får for kodene ovenfor
Navngi radene og kolonnene i en matrise i R
Standardetiketter som [,1] og [3,] gjør det vanskelig å lese resultatet så snart en matrise har reell betydning. Argumentet dimnames og erstatningsfunksjonene rownames() og colnames() legger til tekstetiketter som deretter følger matrisen gjennom cbind(), t() og hver slicing-operasjon.
# 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']
| Funksjon | Leser | sett |
|---|---|---|
| dimnames(m) | Begge dimensjonene som en liste med to vektorer | dimnames(m) <- liste(rader, kolonner) |
| radnavn(m) | Radetikettene | radnavn(m) <- rader |
| kolonnenavn(m) | Kolonneetikettene | kolonnenavn(m) <- kolonner |
| dim(m) | Rader og kolonner som to heltall | dim(m) <- c(nrow, ncol) |
Når etikettene finnes, er sales['north', 'q2'] mye tydeligere enn sales[1, 2] og overlever en omorganisering av radene. Hvis en dimnames-komponent settes til NULL, fjernes det settet med etiketter igjen, og en matrise konvertert med as.data.frame() fører rad- og kolonnenavnene rett inn i Dataramme.
Matrix Operasjoner i R: Aritmetikk, transponering og multiplikasjon
I aritmetikk på matriser lønner det seg å bruke en-type-regelen. Base R håndterer hele settet uten en ekstra pakke, men to operatorer er lette å forveksle: * multipliserer element for element, mens %*% utfører ekte matrisemultiplikasjon og krever at kolonnene i den venstre operanden samsvarer med radene i den høyre.
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)Transponerer matrisen, slik at elementet [i, j] blir [j, i]. Dimnavn overføres.
- løse(m)Returnerer den inverse av en kvadratisk, ikke-singular matrise, og solve(a, b) løser et lineært system.
- radsummer / kolumsummer / radmiddel / kolummiddelDokumentert som ekvivalent med apply() med sum eller mean, men mye raskere.
- bruk(m, MARGIN, MORO)MARGIN = 1 går gjennom radene og MARGIN = 2 går gjennom kolonnene, for enhver funksjon du oppgir.
- diagnose, deteksjon, kryssproduksjonDiagonal, determinant og den raskeste formen av t(x) %*% y.
Fordi disse operasjonene er vektoriserte, erstatter de løkker i stedet for å ligge inni dem. Et sammendrag som ville tatt en nestet for-løkke over tusenvis av celler blir et enkelt colMeans()-kall, noe som er viktig så snart dataene vokser.
Matrise vs. dataramme vs. array i R
Matriser, datarammer og arrayer ser alle rektangulære ut i konsollen, men de svarer på forskjellige spørsmål. Tabellen plasserer dem side om side.
| Eiendom | Matrix | Dataramme | Array |
|---|---|---|---|
| Dimensjoner | Nøyaktig 2 | Nøyaktig 2 | Et hvilket som helst tall |
| Kolonnetyper | Én type for hele objektet | En annen type per kolonne | Én type for hele objektet |
| Bygget med | matrise() | data.frame() | array() |
| Typisk bruk | Numerisk beregning og lineær algebra | Blandede observasjonsdata | Stablede tabeller, for eksempel antall etter år |
| Radetiketter | Valgfrie dimnavn | Radnavn er alltid til stede | Valgfrie dimnavn |
# 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')
Rekk etter en matrise når hver celle er av samme type tall og arbeidet er aritmetisk. Rekk etter en Dataramme når kolonner har forskjellige typer, for eksempel et tegnnavn ved siden av en numerisk pris og en faktor. Strekk deg etter en liste når delene har ulik lengde, og for en matrise når en tredje indeks, som tid eller region, faktisk eksisterer. Konvertering i begge retninger er billig med as.matrix() og as.data.frame(), slik at strukturen kan følge oppgaven i stedet for omvendt.




