Matriisifunktio R:ssä: Luo, tulosta, lisää sarake ja leikkaa
⚡ Älykäs yhteenveto
R:n matriisi on kaksiulotteinen taulukko, joka sisältää yhden tietotyypin m rivillä ja n sarakkeella. Se rakennetaan matrix():lla, laajennetaan cbind():lla ja rbind():lla ja siihen päästään hakasulkeiden kautta.

Matriisifunktio R:ssä
R:n matriisifunktio on 2-ulotteinen taulukko, jossa on m määrä rivejä ja n sarakkeita. Toisin sanoen R-ohjelmoinnin matriisi on yhdistelmä kahdesta tai useammasta vektorista, joilla on sama tietotyyppi.
Matriisi on yksinkertaisesti vektori, jolla on kahden pituinen dim-attribuutti. Siksi jokaisen elementin on oltava yhtä tyyppiä: heti kun merkkiarvo liittyy lukuihin, koko matriisi pakotetaan merkkimuotoon. R tallentaa arvot yhteen sarakkeeseen ja käyttää dim-attribuuttia päättääkseen, mihin kukin rivi päättyy, joten valinta tietotyyppi koskee koko kohdetta kerralla.
Huomautus: matrix() itse palauttaa aina täsmälleen kaksi ulottuvuutta. Jos haluat rakentaa R:ssä kolmi- tai useampiulotteisen rakenteen, käytä array()-funktiota dim-vektorin kanssa tai määritä dim()-funktiolle suoraan. Alla oleva kaavio näyttää rivi- ja sarakeasettelun, jota jokainen matriisi noudattaa.
Kuinka luoda matriisi R:ssä
Voimme luoda matriisin funktiolla matriisi()R-perusallekirjoitus ottaa vastaan viisi argumenttia, joista kolme useimmin käytettyä on esitetty tässä:
matrix(data, nrow, ncol, byrow = FALSE)
argumentit:
- tiedotJoukko elementtejä, jotka R järjestää matriisin riveille ja sarakkeisiin.
- nrowRivien lukumäärä.
- ncolSarakkeiden lukumäärä.
- byrowLooginen merkintä. Oletusarvolla byrow = FALSE matriisi täytetään sarake sarakkeelta ylhäältä alas. Jos byrow = TRUE, matriisi täytetään rivi riviltä vasemmalta oikealle.
- dimnamesValinnainen kahden pituinen lista, joka sisältää rivien ja sarakkeiden nimet.
Kaksi yksityiskohtaa R-perusviittauksesta on hyvä tietää ennen ensimmäistä esimerkkiä. Jos annetaan vain toinen nrow:sta ja ncol:sta, R päättelee toisen datan pituudesta. Ja jos datassa on liian vähän elementtejä pyydetyn muodon täyttämiseksi, arvot kierrätetään hylkäämisen sijaan.
Muodostetaan kaksi 5×2-matriisia numerosarjasta 1–10, toinen, jossa byrow = TOSI ja toinen, jossa byrow = EPÄTOSI, nähdäksemme eron.
# 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
lähtö:
Koska käytettiin arvoa byrow = TRUE, konsoli täyttää ensimmäisen rivin numeroilla 1 ja 2, toisen rivin numeroilla 3 ja 4 ja niin edelleen.
Tulosta matriisin a ulottuvuus funktiolla dim()
Tulostetaan nyt R:n matriisin mitat dim(:llä). Syntaksi tulostaa matriisin R:ssä käyttämällä dim():tä on:
# Print dimension of the matrix with dim()
dim(matrix_a)
lähtö:
## [1] 5 2
dim() palauttaa ensin rivien määrän ja toiseksi sarakkeiden määrän, mikä vahvistaa 5×2-muodon.
Täytä matriisi sarakkeen mukaan rivikohtaisesti arvolla FALSE
Samat kymmenen numeroa ja sama rivi-nro tuottavat erilaisen järjestyksen, kun täyttösuunta muuttuu. Pidäping byrow lähettää oletusarvoisesti ensimmäisen sarakkeen arvot alaspäin ennen toisen sarakkeen alkamista.
# 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
lähtö:
Tulosta matriisin b ulottuvuus dim()-funktiolla
Tulosta taas matriisin mitat dim(:llä). Alla on syntaksi R-tulostusmatriisin ulottuvuudesta:
# Print dimension of the matrix with dim()
dim(matrix_b)
lähtö:
## [1] 5 2
Muoto pysyy muuttumattomana koossa 5×2, koska byrow muuttaa täyttöjärjestystä eikä koskaan mittoja.
HuomautuksiaKomennolla matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) on sama vaikutus kuin yllä, koska R päättelee nrow = 5 annetuista kymmenestä arvosta.
Voit myös luoda 4×3-matriisin käyttämällä ncol-funktiota. R luo kolme saraketta ja täyttää jokaisen sarakkeen ylhäältä alas. Katso esimerkkiä.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
lähtö:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
Sarakeotsikot [,1] - [,3] ja riviotsikot [1,] - [4,] ovat R:n oletusarvoisia paikkamerkkejä. Ne katoavat heti, kun todelliset dimname-nimet annetaan, kuten myöhemmin tässä opetusohjelmassa näytetään.
Esimerkiksi:
dim(matrix_c)
lähtö:
## [1] 4 3
Lisää sarake matriisiin komennolla cbind()
Voit lisätä sarakkeen matriisiin R komennolla cbind(). cbind() tarkoittaa sarakesidontaa, ja se voi yhdistää niin monta matriisia tai saraketta kuin on määritetty. Esimerkiksi edellinen esimerkkimme loi 5×2-matriisin. Yhdistämme kolmannen sarakkeen ja varmistamme, että ulottuvuus on 5×3.
Esimerkiksi:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
lähtö:
## [1] 5 3
Esimerkiksi:
matrix_a1
ulostulo
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Esimerkiksi:
Voimme myös sitoa useamman kuin yhden sarakkeen kerrallaan. Seuraava lohko muodostaa matrix_a2:n, 4×3-matriisin, joka sisältää luvut 13–24. Se voidaan yhdistää 4×3-matriisiin_c, jolloin saadaan 4×6-tulos, joka kattaa luvut 1–24.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
lähtö:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Esimerkiksi:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
lähtö:
## [1] 4 6
HUOMAUTUSJotta cbind() toimisi, R:n matriisien rivien lukumäärän on oltava sama. Kun ne eroavat toisistaan, R joko kierrättää lyhyemmän syötteen tai aiheuttaa virheen, joten dim():n tarkistaminen molemmille objekteille ensin on turvallisempi tapa.
Kun cbind() yhdistää sarakkeita, rbind() liittää rivejä. Lisätään yksi rivi matrix_c-matriisiin ja tarkistetaan, että sen dimensio on 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)
lähtö:
## [1] 5 3
Huomaa, että nimetyn vektorin, kuten add_row, sitominen antaa myös uudelle riville kyseisen nimen, mikä on ensimmäinen askel kohti jäljempänä käsiteltyjä merkittyjä matriiseja.
Leikkaa matriisi
Voimme valita matriisista yhden tai useamman elementin R-ohjelmointi käyttämällä hakasulkeita [ ]. Hakasulkeiden sisällä rivivalitsin on ensin ja sarakevalitsin toisena, pilkulla erotettuna. Tässä kohtaa viipalointi tulee kuvaan.
Esimerkiksi:
- matriisi_c[1,2] valitsee elementin ensimmäisestä rivistä ja toisesta sarakkeesta.
- matrix_c[1:3,2:3] tuottaa R-siivumatriisin, jonka tiedot ovat riveillä 1, 2 ja 3 sekä sarakkeissa 2 ja 3.
- matriisi_c[,1] valitsee kaikki ensimmäisen sarakkeen elementit.
- matriisi_c[1,] valitsee kaikki ensimmäisen rivin elementit.
Pilkun toisen puolen jättäminen tyhjäksi tarkoittaa siis jokaista sillä puolella olevaa arvoa. Yksi seuraus yllättää aloittelijat: kun yksi rivi tai sarake valitaan, R pudottaa tyhjän ulottuvuuden ja palauttaa tavallisen vektorin. Lisäämällä drop = FALSE, kuten matriisi_c[1, , drop = FALSE], tulos pysyy matriisina.
Tässä on tulos, jonka saat yllä oleville koodeille
Matriisin rivien ja sarakkeiden nimeäminen R:ssä
Oletusarvoiset otsikot, kuten [,1] ja [3,], tekevät tulosteesta vaikeasti luettavan heti, kun matriisilla on todellinen merkitys. dimnames-argumentti ja rownames()- ja colnames()-korvausfunktiot liittävät tekstiotsikot, jotka sitten kulkevat matriisin mukana cbind()- ja t()-funktioiden sekä jokaisen viipalointioperaation läpi.
# 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']
| Toiminto | lukee | Setit |
|---|---|---|
| dimnames(m) | Molemmat ulottuvuudet kahden vektorin listana | dimnames(m) <- list(rivit, sarakkeet) |
| rivinimet(m) | Rivin otsikot | rivien nimet(m) <- rivit |
| sarakenimet(m) | Sarakkeiden otsikot | sarakkeiden nimet(m) <- sarakkeet |
| hämärä (m) | Rivit ja sarakkeet kahtena kokonaislukuna | dim(m) <- c(nrivi, ncol) |
Kun otsikot ovat olemassa, sales['north', 'q2'] on paljon selkeämpi kuin sales[1, 2] ja säilyy rivien uudelleenjärjestyksen jälkeen. Dimnames-komponentin asettaminen arvoon NULL poistaa kyseisen otsikkojoukon uudelleen, ja as.data.frame()-funktiolla muunnettu matriisi siirtää rivi- ja sarakenimensä suoraan matriisiin. datakehys.
Matriisi OperaR-kielen funktiot: Aritmetiikka, transponointi ja kertolasku
Matriisien laskennassa yksittäinen tyyppisääntö on paras vaihtoehto. R-kantaluku käsittelee koko joukon ilman erillistä pakettia, mutta kaksi operaattoria on helppo sekoittaa: * kertoo elementin elementillä, kun taas %*% suorittaa aidon matriisikertolaskun ja vaatii, että vasemman operandin sarakkeet vastaavat oikean operandin rivejä.
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): Transponoi matriisin, jolloin alkiosta [i, j] tulee [j, i]. Dimensiot siirtyvät eteenpäin.
- ratkaista(m)Palauttaa neliömäisen, ei-singulaarisen matriisin käänteismatriisin ja solve(a, b) ratkaisee lineaarisen lukuryhmän.
- riviSummat / sarakeSummat / riviKeskiarvot / sarakeKeskiarvotDokumentoitu vastaavan funktiota apply() summan tai keskiarvon kanssa, mutta huomattavasti nopeammaksi.
- käytä(m, MARGIN, HAUSKA)MARGIN = 1 käy läpi rivit ja MARGIN = 2 sarakkeet mille tahansa antamallesi funktiolle.
- diag, det, ristiintuottoDiagonaali, determinantti ja nopeampi muoto t(x):stä %*% y.
Koska nämä operaatiot ovat vektorisoituja, ne korvaavat silmukoita sen sijaan, että ne olisivat niiden sisällä. Yhteenvedosta, joka veisi sisäkkäisen for-silmukan tuhansien solujen yli, tulee yksi colMeans()-kutsu, millä on merkitystä heti datan kasvaessa.
Matriisi vs. datakehys vs. taulukko R:ssä
Matriisit, datakehykset ja taulukot näyttävät kaikki konsolissa suorakaiteen muotoisilta, mutta ne vastaavat eri kysymyksiin. Taulukossa ne on asetettu vierekkäin.
| Omaisuus | Matriisi | Datakehys | Ryhmä |
|---|---|---|---|
| Mitat | Aivan 2 | Aivan 2 | Mikä tahansa numero |
| Saraketyypit | Yksi tyyppi koko objektille | Eri tyyppi saraketta kohden | Yksi tyyppi koko objektille |
| Rakennettu | matriisi() | data.frame() | array () |
| Tyypillinen käyttö | Numeerinen laskenta ja lineaarialgebra | Sekalaiset havaintotiedot | Pinotut taulukot, kuten määrät vuosittain |
| Rivin otsikot | Valinnaiset dimnames-nimet | Rivien nimet ovat aina läsnä | Valinnaiset dimnames-nimet |
# 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')
Tartu matriisiin, kun jokainen solu on samanlaista lukua ja työ on aritmeettista. Tartu a:han datakehys kun sarakkeissa on eri tyyppejä, esimerkiksi numeron hinnan vieressä oleva merkkinimi ja tekijäKurottele kohti lista kun osilla on eri pituudet, ja taulukon tapauksessa, kun kolmas indeksi, kuten aika tai alue, on todella olemassa. Muuntaminen kumpaankin suuntaan on edullista as.matrix():n ja as.data.frame():n avulla, joten rakenne voi seurata tehtävää eikä toisinpäin.




