Maatriksifunktsioon R-is: looge, printige, lisage veerg ja lõigake
⚡ Nutikas kokkuvõte
R-i maatriks on kahemõõtmeline massiiv, mis sisaldab ühte andmetüüpi m reas ja n veerus, mis on loodud matrix() abil, laiendatud cbind() ja rbind() abil ning millele pääseb ligi nurksulgude kaudu.

Maatriksfunktsioon R-is
Maatriksfunktsioon R-is on 2-mõõtmeline massiiv, millel on m arv ridu ja n veerge. Teisisõnu, maatriks R-programmeerimises on kombinatsioon kahest või enamast sama andmetüübiga vektorist.
Allpool on maatriks lihtsalt vektor, millel on kahe pikkusega dim atribuut. Seetõttu peab iga element olema ühte tüüpi: hetkel, kui tähemärk liitub arvudega, muudetakse kogu maatriks tähemärgiks. R salvestab väärtused ühte veergu ja kasutab dim funktsiooni iga rea lõppemise otsustamiseks, seega on valik andmetüüp kehtib kogu objekti kohta korraga.
Märge: matrix() ise tagastab alati täpselt kaks dimensiooni. Kolme või enama dimensiooniga struktuuri loomiseks R-is kasutage array() funktsiooni dim vektoriga või määrake dim() otse. Allolev diagramm näitab iga maatriksi ridade ja veergude paigutust.
Kuidas luua maatriksit R-is
Me saame luua maatriksi funktsiooniga maatriks()R-i baassignatuur võtab vastu viis argumenti ja siin on näidatud kolm kõige sagedamini kasutatavat:
matrix(data, nrow, ncol, byrow = FALSE)
Argumendid:
- andmedElementide kogum, mille R paigutab maatriksi ridadesse ja veergudesse.
- nrowRidade arv.
- ncolVeergude arv.
- byrowLoogiline lipp. Vaikimisi väärtuse byrow = FALSE korral täidetakse maatriks veerg veeru haaval ülevalt alla. Vaikimisi väärtuse byrow = TRUE korral täidetakse maatriks rida rea haaval vasakult paremale.
- hämarad nimedValikuline kahepunktiline loend, mis sisaldab rea- ja veerunimesid.
Enne esimest näidet tasub teada kahte detaili baas-R-i viites. Kui antud on ainult üks neist: nrow ja ncol, järeldab R teise andmete pikkusest. Ja kui andmetes on liiga vähe elemente, et täita teie soovitud kuju, siis väärtused taaskasutatakse, mitte ei lükata tagasi.
Erinevuse nägemiseks konstrueerime numbrite 1 kuni 10 jadast kaks 5×2 maatriksit, millest üks on byrow = TRUE ja teine on 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
Väljund:
Kuna kasutati väärtust byrow = TRUE, täidab konsool esimese rea arvudega 1 ja 2, teise rea arvudega 3 ja 4 jne.
Väljasta maatriksi_a mõõde funktsiooniga dim()
Nüüd trükime dim()-ga maatriksi mõõtmed R-s. R-i maatriksi printimise süntaks dim() abil on:
# Print dimension of the matrix with dim()
dim(matrix_a)
Väljund:
## [1] 5 2
dim() tagastab esmalt ridade arvu ja seejärel veergude arvu, kinnitades 5×2 kuju.
Täida maatriks veeru kaupa, kasutades rida = FALSE
Samad kümme numbrit ja sama nrrida annavad erineva paigutuse, kui täitmise suund muutub. Keepping Vaikimisi saadab funktsioon byrow väärtused esimeses veerus allapoole enne teise veeru alustamist.
# 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
Väljund:
Väljasta maatriksi_b mõõde funktsiooniga dim()
Jällegi printige dim() abil maatriksi mõõde. Allpool on R prindimaatriksi mõõtme süntaks:
# Print dimension of the matrix with dim()
dim(matrix_b)
Väljund:
## [1] 5 2
Kuju jääb 5×2 juures muutumatuks, sest „byrow” muudab täitmise järjekorda, mitte mõõtmeid.
märkusedKäsu matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) kasutamine annab sama efekti nagu eespool, kuna R järeldab nrow = 5 kümne antud väärtuse põhjal.
Samuti saate luua 4×3 maatriksi, kasutades funktsiooni ncol. R loob 3 veergu ja täidab iga veeru ülevalt alla. Vaadake näidet.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
Väljund:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
Veergude päised [,1] kuni [,3] ja rea siltide [1,] kuni [4,] on R-i vaikekohahoidjad. Need kaovad kohe, kui tegelikud dimname-id on sisestatud, nagu selles õpetuses hiljem näidatakse.
Näide:
dim(matrix_c)
Väljund:
## [1] 4 3
Lisage maatriksile veerg käsuga cbind()
Maatriksile R saab veeru lisada käsuga cbind(). cbind() tähendab veeru sidumist ja see saab liita nii palju maatrikseid või veerge, kui on määratud. Näiteks meie eelmises näites loodi 5×2 maatriks. Me liidame kokku kolmanda veeru ja kontrollime, et selle mõõde oleks 5×3.
Näide:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
Väljund:
## [1] 5 3
Näide:
matrix_a1
Väljund
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Näide:
Samuti saame korraga siduda rohkem kui ühe veeru. Järgmine plokk loob maatriksi_a2, mis on 4×3 maatriks, mis sisaldab numbreid 13 kuni 24, nii et selle saab ühendada 4×3 maatriksiga_c, et saada 4×6 tulemus, mis hõlmab numbreid 1 kuni 24.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
Väljund:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Näide:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
Väljund:
## [1] 4 6
MÄRKUSEDMaatriksite ridade arv R-is peab olema võrdne, et cbind() töötaks. Kui need erinevad, taaskasutab R kas lühemat sisendit või tekitab vea, seega on turvalisem tava kontrollida dim()-i esmalt mõlemal objektil.
Kui cbind() ühendab veerge, siis rbind() lisab ridu. Lisame oma matrix_c maatriksile ühe rea ja kontrollime, et selle mõõde oleks 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)
Väljund:
## [1] 5 3
Pane tähele, et nimega vektori, näiteks add_row, sidumine annab ka uuele reale selle nime, mis on esimene samm allpool käsitletud märgistatud maatriksite suunas.
Viiluta maatriks
Maatriksist saame valida ühe või mitu elementi R programmeerimine kasutades nurksulge [ ]. Sulgudes on reavalija esimesena ja veeruvalija teisena, eraldatuna komaga. Siin tulebki mängu viilutamine.
Näiteks:
- maatriks_c[1,2] valib elemendi esimeses reas ja teises veerus.
- matrix_c[1:3,2:3] tulemuseks on R-lõikeline maatriks, mille andmed on ridadel 1, 2, 3 ning veergudel 2 ja 3.
- maatriks_c[,1] valib kõik esimese veeru elemendid.
- maatriks_c[1,] valib kõik esimese rea elemendid.
Koma ühe poole tühjaks jätmine tähendab seega iga sellel poolel olevat väärtust. Üks tagajärg tabab algajaid: kui üks rida või veerg on valitud, siis R eemaldab tühja dimensiooni ja annab tagasi tavalise vektori. Lisades drop = FALSE, nagu maatriks_c[1, , drop = FALSE], jääb tulemuseks maatriks.
Siin on ülaltoodud koodide väljund
Nimeta maatriksi read ja veerud R-is
Vaikimisi märgendid nagu [,1] ja [3,] muudavad väljundi raskesti loetavaks niipea, kui maatriksile tekib reaalne tähendus. Argument dimnames ning asendusfunktsioonid rownames() ja colnames() lisavad tekstimärgendeid, mis seejärel liiguvad koos maatriksiga läbi cbind(), t() ja iga viilutamisoperatsiooni.
# 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']
| funktsioon | Loeb | Komplektid |
|---|---|---|
| dimnames(m) | Mõlemad mõõtmed kahe vektori loendina | dimnames(m) <- list(read, veerud) |
| reanimed(m) | Rea sildid | reanimed(m) <- read |
| veerunimed(m) | Veergude sildid | veerunimed(m) <- veerud |
| hämarus (m) | Read ja veerud kahe täisarvuna | dim(m) <- c(nrow, ncol) |
Kui sildid on olemas, on sales['north', 'q2'] palju selgem kui sales[1, 2] ja jääb ridade ümberjärjestamisele kindlaks. Komponendi dimnames väärtuseks NULL määramine eemaldab selle siltide komplekti uuesti ja funktsiooniga as.data.frame() teisendatud maatriks kannab oma rea- ja veerunimed otse maatriksisse. andmeraam.
maatriks Operaloogika R-is: aritmeetika, transponeerimine ja korrutamine
Maatriksite aritmeetikas tasub ühe tüübi reegel end ära. Baas R käsitleb kogu hulka ilma lisapaketita, kuid kahte operaatorit on lihtne segi ajada: * korrutab elemendi elemendi haaval, samas kui %*% teostab ehtsa maatriksi korrutamise ja nõuab, et vasakpoolse operandi veerud vastaksid parempoolse operandi ridadele.
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): Transponeerib maatriksi, nii et elemendist [i, j] saab [j, i]. Dimensiooninimed kantakse üle.
- lahenda(m)Tagastab ruutmaatriksi pöördväärtuse mittesingulaarselt ja solve(a, b) lahendab lineaarse funktsioonisüsteemi.
- reaSummad / veeruSummad / reaKeskmised / veeruKeskmisedDokumenteeritud kui apply() funktsiooniga summa või keskmise puhul samaväärne, aga palju kiirem.
- rakenda(m, MARGIN, FUN)MARGIN = 1 käib läbi read ja MARGIN = 2 veerud mis tahes antud funktsiooni korral.
- diag, det, risttootmineDiagonaal, determinant ja funktsiooni t(x) kiirem vorm %*% y.
Kuna need operatsioonid on vektoriseeritud, asendavad nad tsükleid, mitte ei asu nende sees. Kokkuvõte, mis hõlmaks tuhandete lahtrite jaoks pesastatud for-tsüklit, muutub üheks colMeans()-kõneks, mis muutub oluliseks kohe, kui andmed kasvavad.
Maatriks vs andmeraam vs massiiv R-is
Maatriksid, andmeraamid ja massiivid näevad konsoolis kõik ristkülikukujulised välja, kuid vastavad erinevatele küsimustele. Tabelis on need kõrvuti asetatud.
| vara | maatriks | Andmeraam | Array |
|---|---|---|---|
| Padjapüüri mõõt | Täpselt 2 | Täpselt 2 | Mis tahes number |
| Veergude tüübid | Üks tüüp kogu objekti jaoks | Erinev tüüp veeru kohta | Üks tüüp kogu objekti jaoks |
| Ehitatud koos | maatriks() | andmed.frame() | massiiv() |
| Tüüpiline kasutamine | Numbriline arvutus ja lineaaralgebra | Segased vaatlusandmed | Virnastatud tabelid, näiteks loendused aastate kaupa |
| Rea sildid | Valikulised dimnamed | Rea nimed on alati olemas | Valikulised dimnamed |
# 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')
Võtke maatriks, kui iga lahter on sama tüüpi arv ja töö on aritmeetiline. Võtke maatriks. andmeraam kui veerud kannavad erinevat tüüpi, näiteks numbrilise hinna kõrval olev tähemärk ja faktorSiruta käe a järele nimekiri kui osadel on erinev pikkus ja massiivi puhul, kui kolmas indeks, näiteks aeg või piirkond, on tõepoolest olemas. Mõlemas suunas teisendamine on as.matrix() ja as.data.frame() abil odav, seega saab struktuur järgida ülesannet, mitte vastupidi.




