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.

  • 🧩 Struktuur: Maatriks on vektor, millel on dim atribuut, seega peab igal lahtril olema üks andmetüüp.
  • 🛠️ Loomine: matrix(data, nrow, ncol, byrow) järjestab jada ja R järeldab puuduva dimensiooni.
  • 🔄 Täitke tellimus: byrow = FALSE täidab veeru veeru haaval, samas kui byrow = TRUE täidab rea rea ​​haaval.
  • Kasv: cbind() lisab veerge ja rbind() lisab ridu, eeldusel, et jagatud dimensioon sobib.
  • Viilutamine: m[rida, veerg] loeb esmalt read ja tühi külg valib kõik sellel küljel olevad read.
  • ???? ️ Labels: Funktsioonid dimnames, rownames() ja colnames() asendavad [,1] kohatäited loetavate nimedega.
  • ➕➖ Aritmeetika: Tärn korrutab elemente elemendi haaval, samas kui %*% teostab maatriksite korrutamist.

Maatriksifunktsioon R-is Loo Print Lisa Veerg ja Slice

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.

Maatriksfunktsiooni ridade ja veergude paigutus R-is

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.

Maatriksi_a konsooliväljund on täidetud rida-realt, kus byrow = TRUE

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:

Maatriksi_b konsooliväljund täitis veeru veeru haaval väärtusega byrow = FALSE

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

Nelja maatriksilõikamise avaldise konsooli tulemused R-is

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.

KKK

R taaskasutab väärtusi nende tagasilükkamise asemel, seega matrix(1:3, nrow = 2, ncol = 3) kordab järjestust. Hoiatus kuvatakse ainult siis, kui pikkus ei ole lahtrite arvu täpne kordne, mistõttu on vaikne taaskasutus lihtne märkamata jätta.

Kasutage negatiivset indeksit: m[-2, ] eemaldab teise rea ja m[, -3] eemaldab kolmanda veeru. Mitu objekt võib korraga minna, kui kasutad m[-c(1, 4), ]. Algne objekt jääb samaks, kuni tulemus tagasi omistatakse.

Ühe rea või veeru valimine kustutab tühja dimensiooni vaikimisi. Üherealise maatriksi säilitamiseks lisage drop = FALSE, nagu m[1, , drop = FALSE]. See on oluline siis, kui tulemus edastatakse funktsioonile, mis ootab kahte dimensiooni.

which(m == value, arr.ind = TRUE) tagastab kaheveerulise tulemuse, mis annab iga vaste rea ja veeru. Ilma arr.ind-ita on vastuseks üks lineaarne indeks, mis on veergude kaupa allapoole loendatud, mis on harva see, mida soovite.

Kasuta funktsiooni array(data, dim = c(rows, columns, layers)) või määra dim(x) otse vektorile. Lõikamine võtab siis iga dimensiooni kohta ühe indeksi, näiteks a[2, 3, 1]. Maatriks on lihtsalt massiivi kahemõõtmeline juhtum.

Jah. R-i baasviide väidab, et rowSums ja colMeans on samaväärsed sum või mean puhul apply() funktsiooniga, kuid palju kiiremad ja mõlemad ületavad selgesõnalise for-tsükli, kuna iteratsioon toimub kompileeritud koodis, mitte interpretaatoris.

Mudeli sobitamine on lineaaralgebra: tunnused moodustavad maatriksi, kordajad moodustavad vektori ja ennustus on ühekordne %*% korrutis. Paljud masinõpe Seetõttu vajavad paketid sisendina pigem numbrilist maatriksit kui andmeraami.

Jah. GitHubi koopia töötab RStudio 2023.09.0 ja uuemates versioonides ning lõpetab koodi avatud faili kommentaaride põhjal. Kontrollige selle dimensiooniloogikat RStuudio, sest vale nrow annab ikkagi kehtiva maatriksi.

Võta see postitus kokku järgmiselt: