Funkcija matrice u R: Stvaranje, ispis, dodavanje stupaca i isječak
⚡ Pametni sažetak
Matrica u R-u je dvodimenzionalni niz koji sadrži jedan tip podataka u m redaka i n stupaca, izgrađen s matrix(), proširen s cbind() i rbind(), a dostupan je kroz uglate zagrade.
Matrična funkcija u R
Matrična funkcija u R je dvodimenzionalni niz koji ima m redaka i n stupaca. Drugim riječima, matrica u R programiranju je kombinacija dva ili više vektora s istim tipom podataka.
U nastavku, matrica je jednostavno vektor koji nosi atribut dim duljine dva. Zato svaki element mora dijeliti jedan tip: u trenutku kada se vrijednost znaka spoji s brojevima, cijela matrica se prisiljava na karakter. R pohranjuje vrijednosti u jednom nizu po stupcima i koristi dim za odlučivanje gdje svaki redak završava, pa je izbor tip podataka primjenjuje se na cijeli objekt odjednom.
Bilješka: Sama matrix() uvijek vraća točno dvije dimenzije. Za izgradnju strukture s tri ili više dimenzija u R-u, koristite array() s dim vektorom ili izravno dodijelite dim(). Dijagram u nastavku prikazuje raspored redaka i stupaca koji svaka matrica slijedi.
Kako stvoriti matricu u R
Možemo stvoriti matricu s funkcijom matrica()Osnovni R potpis prima pet argumenata, a ovdje su prikazana tri najčešće korištena:
matrix(data, nrow, ncol, byrow = FALSE)
argumenti:
- datumSkup elemenata koje će R rasporediti u retke i stupce matrice.
- uskoBroj redaka.
- ncolBroj stupaca.
- uz redLogička zastavica. S zadanim byrow = FALSE matrica se popunjava stupac po stupac, od vrha prema dnu. S byrow = TRUE popunjava se redak po redak, slijeva nadesno.
- dimnamesNeobavezni popis duljine dva koji sadrži nazive redaka i nazive stupaca.
Prije prvog primjera vrijedi znati dva detalja iz osnovne R reference. Ako je zadan samo jedan od nrow i ncol, R zaključuje drugi iz duljine podataka. A ako podaci sadrže premalo elemenata za popunjavanje traženog oblika, vrijednosti se recikliraju, a ne odbacuju.
Konstruirajmo dvije matrice 5×2 iz niza brojeva od 1 do 10, jednu s byrow = TRUE i jednu s byrow = FALSE, kako bismo vidjeli razliku.
# 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
Izlaz:
Budući da je korišteno byrow = TRUE, konzola popunjava prvi redak s 1 i 2, drugi redak s 3 i 4 i tako dalje.
Ispišite dimenziju matrice_a pomoću dim()
Sada, ispišite dimenziju matrice u R pomoću dim(). Sintaksa za ispis matrice u R pomoću dim() je:
# Print dimension of the matrix with dim()
dim(matrix_a)
Izlaz:
## [1] 5 2
dim() prvo vraća broj redaka, a zatim broj stupaca, potvrđujući oblik 5×2.
Popuni matricu po stupcima s byrow = FALSE
Istih deset brojeva i isti red stvaraju drugačiji raspored nakon promjene smjera popunjavanja. Keeping byrow prema zadanim postavkama šalje vrijednosti u prvi stupac prije početka drugog.
# 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
Izlaz:
Ispišite dimenziju matrice_b pomoću dim()
Opet ispišite dimenziju matrice koristeći dim(). Ispod je sintaksa R dimenzije matrice ispisa:
# Print dimension of the matrix with dim()
dim(matrix_b)
Izlaz:
## [1] 5 2
Oblik se ne mijenja na 5×2, jer byrow mijenja redoslijed popunjavanja, a nikada dimenzije.
bilješkeKorištenje naredbe matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) imat će isti učinak kao gore, budući da R zaključuje da je nrow = 5 iz deset navedenih vrijednosti.
Također možete stvoriti matricu 4×3 pomoću ncol-a. R će stvoriti 3 stupca i popuniti svaki stupac od vrha do dna. Pogledajte primjer
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
Izlaz:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
Zaglavlja stupaca [,1] do [,3] i oznake redaka [1,] do [4,] su R-ova zadana rezervirana mjesta. Nestaju čim se navedu stvarni nazivi dimenzija, kao što je prikazano kasnije u ovom vodiču.
Primjer:
dim(matrix_c)
Izlaz:
## [1] 4 3
Dodajte stupac u matricu pomoću cbind()
Stupac možete dodati matrici R pomoću naredbe cbind(). cbind() znači povezivanje stupaca i može spojiti onoliko matrica ili stupaca koliko je navedeno. Na primjer, naš prethodni primjer stvorio je matricu 5×2. Spojimo treći stupac i provjeravamo je li dimenzija 5×3.
Primjer:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
Izlaz:
## [1] 5 3
Primjer:
matrix_a1
Izlaz
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Primjer:
Također možemo istovremeno povezati više stupaca. Sljedeći blok gradi matricu_a2, matricu 4×3 koja sadrži brojeve od 13 do 24, tako da se može spojiti s matricom_c 4×3 kako bi se dobio rezultat 4×6 koji pokriva od 1 do 24.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
Izlaz:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Primjer:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
Izlaz:
## [1] 4 6
BILJEŠKABroj redaka matrica u R-u mora biti jednak da bi cbind() radio. Kada se razlikuju, R ili reciklira kraći ulaz ili izaziva grešku, pa je sigurnija navika prvo provjeriti dim() na oba objekta.
Gdje cbind() spaja stupce, rbind() dodaje retke. Dodajmo jedan redak našoj matrici matrix_c i provjerimo je li dimenzija 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)
Izlaz:
## [1] 5 3
Primijetite da povezivanje imenovanog vektora kao što je dodaj_redak također daje novom retku to ime, što je prvi korak prema označenim matricama koje su objašnjene dalje u tekstu.
Narežite Matrix
Možemo odabrati jedan ili više elemenata iz matrice u R programiranje pomoću uglatih zagrada []. Unutar zagrada, birač retka dolazi prvi, a birač stupca drugi, odvojeni zarezom. Tu na scenu stupa rezanje.
Na primjer:
- matrix_c[1,2] odabire element u prvom retku i drugom stupcu.
- matrix_c[1:3,2:3] rezultira R matricom slojeva s podacima u retcima 1, 2, 3 i stupcima 2 i 3.
- matrix_c[,1] odabire sve elemente prvog stupca.
- matrix_c[1,] odabire sve elemente prvog retka.
Ostavljanje zareza praznom stoga znači svaku vrijednost na toj strani. Jedna posljedica iznenađuje početnike: kada je odabran jedan redak ili stupac, R odbacuje praznu dimenziju i vraća običan vektor. Dodavanjem drop = FALSE, kao u matrix_c[1, , drop = FALSE], rezultat ostaje matrica.
Ovo je rezultat koji dobivate za gore navedene kodove
Imenujte retke i stupce matrice u R-u
Zadane oznake poput [,1] i [3,] otežavaju čitanje izlaza čim matrica dobije stvarno značenje. Argument dimnames i zamjenske funkcije rownames() i colnames() dodaju tekstualne oznake koje zatim putuju s matricom kroz cbind(), t() i svaku operaciju rezanja.
# 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']
| funkcija | Čita | Kompleti |
|---|---|---|
| dimnames(m) | Obje dimenzije kao popis od dva vektora | dimnames(m) <- popis(retci, stupci) |
| nazivi_redova(m) | Oznake redaka | nazivi_redova(m) <- redovi |
| kolonski nazivi (m) | Oznake stupaca | nazivi_stupaca(m) <- stupci |
| dim(m) | Redci i stupci kao dva cijela broja | dim(m) <- c(nrow, ncol) |
Nakon što oznake postoje, sales['north', 'q2'] je puno jasnija od sales[1, 2] i preživljava promjenu redoslijeda redaka. Postavljanje komponente dimnames na NULL ponovno uklanja taj skup oznaka, a matrica pretvorena s as.data.frame() prenosi svoja imena redaka i stupaca izravno u podatkovni okvir.
Distributori Operacije u R-u: Aritmetika, transpozicija i množenje
Aritmetika na matricama je mjesto gdje se pravilo jednog tipa isplati. Bazni R obrađuje cijeli skup bez dodatnog paketa, ali dva operatora je lako pomiješati: * množi element po elementu, dok %*% izvodi pravo množenje matrica i zahtijeva da stupci lijevog operanda odgovaraju retcima desnog.
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)Transponira matricu, tako da element [i, j] postaje [j, i]. Dimenzije se prenose.
- riješiti(m)Vraća inverz kvadratne, nesingularne matrice, a solve(a, b) rješava linearni sustav.
- Zbrojevi_redova / Zbrojevi_stupaca / Sredstva_redova / Sredstva_stupacaDokumentirano kao ekvivalent apply() sa sumom ili mean, ali puno brže.
- primijeni(m, MARGINA, ZABAVA)MARGIN = 1 obilazi retke, a MARGIN = 2 obilazi stupce, za bilo koju funkciju koju navedete.
- dijagnostika, detalj, unakrsna produkcijaDijagonala, determinanta i brži oblik t(x) %*% y.
Budući da su ove operacije vektorizirane, one zamjenjuju petlje umjesto da se nalaze unutar njih. Sažetak koji bi zahtijevao ugniježđenu for petlju kroz tisuće ćelija postaje jedan poziv colMeans(), što je važno čim podaci rastu.
Matrica vs. okvir podataka vs. niz u R-u
Matrice, okviri podataka i nizovi izgledaju pravokutno u konzoli, ali odgovaraju na različita pitanja. Tablica ih postavlja jednu pored druge.
| Svojstvo | Distributori | Okvir podataka | Poredak |
|---|---|---|---|
| Dimenzije | Točno 2 | Točno 2 | Bilo koji broj |
| Vrste stupaca | Jedan tip za cijeli objekt | Drugačiji tip po stupcu | Jedan tip za cijeli objekt |
| Izgrađeno sa | matrica() | podaci.okvir() | niz() |
| Tipična upotreba | Numeričko računanje i linearna algebra | Mješoviti opservacijski podaci | Slojene tablice, kao što su brojevi po godinama |
| Oznake redaka | Neobavezni nazivi dimenzija | Nazivi redaka uvijek su prisutni | Neobavezni nazivi dimenzija |
# 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')
Posegnite za matricom kada je svaka ćelija ista vrsta broja i kada je posao aritmetički. Posegnite za podatkovni okvir kada stupci nose različite tipove, na primjer naziv znaka pored numeričke cijene i faktorPosegnite za popis kada dijelovi imaju različite duljine, a za niz kada treći indeks, poput vremena ili regije, zaista postoji. Konverzija u oba smjera je jeftina s as.matrix() i as.data.frame(), tako da struktura može pratiti zadatak, a ne obrnuto.





