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.




