Funcția de matrice în R: Creați, imprimați, adăugați coloană și tranșare
⚡ Rezumat inteligent
Matricea în R este o matrice bidimensională care conține un singur tip de date pe m rânduri și n coloane, construită cu matrix(), extinsă cu cbind() și rbind() și accesibilă prin paranteze pătrate.

Funcția matriceală în R
O funcție matriceală din R este o matrice bidimensională care are m număr de rânduri și n număr de coloane. Cu alte cuvinte, matricea în programarea R este o combinație de doi sau mai mulți vectori cu același tip de date.
În esență, o matrice este pur și simplu un vector care poartă un atribut dim de lungime doi. De aceea, fiecare element trebuie să aibă același tip: în momentul în care o valoare caracter se unește cu numere, întreaga matrice este forțată să aibă un tip caracter. R stochează valorile într-o singură coloană și folosește dim pentru a decide unde se termină fiecare rând, astfel încât alegerea tip de date se aplică întregului obiect deodată.
Notă: Funcția matrix() returnează întotdeauna exact două dimensiuni. Pentru a construi o structură cu trei sau mai multe dimensiuni în R, utilizați array() cu un vector dim sau atribuiți direct funcția dim(). Diagrama de mai jos arată structura pe rânduri și coloane pe care o urmează fiecare matrice.
Cum se creează o matrice în R
Putem crea o matrice cu funcția matrice()Semnătura de bază R primește cinci argumente, iar cele trei utilizate cel mai des sunt prezentate aici:
matrix(data, nrow, ncol, byrow = FALSE)
argumente:
- de dateColecția de elemente pe care R le va aranja pe rândurile și coloanele matricei.
- nrow: Numărul de rânduri.
- NcolNumărul de coloane.
- rădăcinăUn flag logic. Cu byrow = FALSE implicit, matricea este umplută coloană cu coloană, de sus în jos. Cu byrow = TRUE, matricea este umplută rând cu rând, de la stânga la dreapta.
- nume dimO listă opțională de lungime doi care furnizează numele rândurilor și numele coloanelor.
Două detalii din referința de bază R merită știute înainte de primul exemplu. Dacă este dată doar una dintre nrow și ncol, R o deduce pe cealaltă din lungimea datelor. Și dacă datele conțin prea puține elemente pentru a completa forma solicitată, valorile sunt reciclate în loc să fie respinse.
Să construim două matrici de 5×2 din secvența numerelor de la 1 la 10, una cu byrow = TRUE și una cu byrow = FALSE, pentru a vedea diferența.
# 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
ieșire:
Deoarece s-a folosit byrow = TRUE, consola umple primul rând cu 1 și 2, al doilea rând cu 3 și 4 și așa mai departe.
Afișează dimensiunea matricii_a cu dim()
Acum, să tipărim dimensiunea matricei în R cu dim(). Sintaxa pentru a imprima matricea în R folosind dim() este:
# Print dimension of the matrix with dim()
dim(matrix_a)
ieșire:
## [1] 5 2
dim() returnează mai întâi numărul de rânduri și apoi numărul de coloane, confirmând forma 5×2.
Completați o matrice după coloană cu byrow = FALSE
Aceleași numere de zece și același număr produc un aranjament diferit odată ce direcția de umplere se schimbă. Păstrațiping Funcția byrow, în mod implicit, trimite valorile în prima coloană înainte de a începe a doua.
# 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
ieșire:
Afișează dimensiunea matrix_b cu dim()
Din nou, imprimați dimensiunea matricei folosind dim(). Mai jos este o sintaxă a dimensiunii matricei de tipărire R:
# Print dimension of the matrix with dim()
dim(matrix_b)
ieșire:
## [1] 5 2
Forma rămâne neschimbată la 5×2, deoarece byrow modifică ordinea de umplere și niciodată dimensiunile.
notițeUtilizarea comenzii matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) va avea același efect ca mai sus, deoarece R deduce nrow = 5 din cele zece valori furnizate.
De asemenea, puteți crea o matrice de 4×3 folosind ncol. R va crea 3 coloane și va umple fiecare coloană de sus în jos. Vedeți un exemplu.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
ieșire:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
Anteturile de coloană [,1] până la [,3] și etichetele de rând [1,] până la [4,] sunt substituenții impliciti ai R. Acestea dispar imediat ce sunt furnizate nume reale de dim, așa cum se va arăta mai târziu în acest tutorial.
Exemplu:
dim(matrix_c)
ieșire:
## [1] 4 3
Adăugați o coloană la o matrice cu cbind()
Puteți adăuga o coloană la matricea R cu comanda cbind(). cbind() înseamnă legare de coloane și poate concatena oricâte matrici sau coloane sunt specificate. De exemplu, exemplul nostru anterior a creat o matrice de 5×2. Concatenăm o a treia coloană și verificăm că dimensiunea este 5×3.
Exemplu:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
ieșire:
## [1] 5 3
Exemplu:
matrix_a1
producție
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Exemplu:
De asemenea, putem lega mai multe coloane simultan. Următorul bloc construiește matrix_a2, o matrice de 4×3 care conține numerele de la 13 la 24, astfel încât să poată fi unită cu matrix_c de 4×3 pentru a produce un rezultat de 4×6 care acoperă numerele de la 1 la 24.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
ieșire:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Exemplu:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
ieșire:
## [1] 4 6
NOTĂNumărul de rânduri ale matricelor din R trebuie să fie egal pentru ca cbind() să funcționeze. Când acestea diferă, R fie reciclează intrarea mai scurtă, fie generează o eroare, așa că verificarea mai întâi a funcției dim() pe ambele obiecte este cea mai sigură metodă.
Unde cbind() concatenează coloanele, rbind() adaugă rânduri. Să adăugăm un rând la matricea noastră matrix_c și să verificăm că dimensiunea este 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)
ieșire:
## [1] 5 3
Observați că legarea unui vector denumit, cum ar fi add_row, atribuie și noului rând acel nume, acesta fiind primul pas către matricile etichetate descrise mai jos.
Tăiați o matrice
Putem selecta unul sau mai multe elemente dintr-o matrice în R programare prin utilizarea parantezelor pătrate [ ]. În interiorul parantezelor, selectorul de rânduri este primul, iar selectorul de coloane este al doilea, separate prin virgulă. Aici intervine secționarea pe sectoare.
De exemplu:
- matrix_c[1,2] selectează elementul pe primul rând și pe a doua coloană.
- matrix_c[1:3,2:3] are ca rezultat o matrice de tip felie R cu datele de pe rândurile 1, 2, 3 și coloanele 2 și 3.
- matrix_c[,1] selectează toate elementele primei coloane.
- matrix_c[1,] selectează toate elementele din primul rând.
Prin urmare, lăsarea unei părți a virgulei necompletată înseamnă că se aplică fiecare valoare de pe acea parte. O consecință îi ia prin surprindere pe începători: atunci când este selectat un singur rând sau o coloană, R elimină dimensiunea goală și returnează un vector simplu. Adăugarea de la drop = FALSE, ca în matrix_c[1, , drop = FALSE], menține rezultatul ca o matrice.
Iată rezultatul pe care îl obțineți pentru codurile de mai sus
Denumiți rândurile și coloanele unei matrice în R
Etichetele implicite, cum ar fi [,1] și [3,], fac ca ieșirea să fie dificil de citit imediat ce o matrice are o semnificație reală. Argumentul dimnames și funcțiile de înlocuire rownames() și colnames() atașează etichete text care apoi circulă odată cu matricea prin cbind(), t() și fiecare operație de feliere.
# 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']
| Funcţie | Citește | Seturi |
|---|---|---|
| numedim(m) | Ambele dimensiuni ca o listă de doi vectori | dimnames(m) <- listă(rânduri, coloane) |
| nume de rânduri (m) | Etichetele rândurilor | nume_de_rânduri(m) <- rânduri |
| coloane (m) | Etichetele coloanelor | coloane(m) <- coloane |
| dim(m) | Rânduri și coloane ca două numere întregi | dim(m) <- c(nrow, ncol) |
Odată ce etichetele există, sales['north', 'q2'] este mult mai clară decât sales[1, 2] și supraviețuiește unei reordonări a rândurilor. Setarea unei componente dimnames la NULL elimină din nou acel set de etichete, iar o matrice convertită cu as.data.frame() transportă numele rândurilor și coloanelor direct în cadru de date.
Matrice Operațiuni în R: Aritmetică, Transpunere și Înmulțire
Aritmetica matricelor este locul în care regula unui singur tip se dovedește a fi eficientă. R de bază gestionează întreaga mulțime fără un pachet suplimentar, dar doi operatori sunt ușor de confundat: * înmulțește element cu element, în timp ce %*% efectuează o înmulțire matriceală autentică și necesită ca coloanele operandului din stânga să se potrivească cu rândurile operandului din dreapta.
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)Transpune matricea, astfel încât elementul [i, j] devine [j, i]. Numele dimensiunilor sunt preluate.
- rezolva (m)Returnează inversa unei matrice pătrate, nesingulare, iar solve(a, b) rezolvă un sistem liniar.
- SumeRânduri / SumeColoane / MediiRânduri / MediiColoaneDocumentat ca echivalent cu apply() cu sumă sau medie, dar mult mai rapid.
- aplică(m, MARJĂ, DISTRACȚIE)MARGIN = 1 parcurge rândurile și MARGIN = 2 parcurge coloanele, pentru orice funcție pe care o furnizați.
- diag, det, crossprodDiagonală, determinant și forma mai rapidă a lui t(x) %*% y.
Deoarece aceste operații sunt vectorizate, ele înlocuiesc buclele în loc să se afle în interiorul acestora. Un rezumat care ar necesita o buclă for imbricată pe mii de celule devine un singur apel colMeans(), ceea ce este important imediat ce datele cresc.
Matrice vs. Cadru de date vs. Array în R
Matricile, cadrele de date și tablourile arată dreptunghiular în consolă, însă răspund la întrebări diferite. Tabelul le așează una lângă alta.
| Proprietatea | Matrice | Cadrul de date | Mulțime |
|---|---|---|---|
| Dimensiuni | Exact 2 | Exact 2 | Orice număr |
| Tipuri de coloane | Un singur tip pentru întregul obiect | Un tip diferit per coloană | Un singur tip pentru întregul obiect |
| Construit cu | matrice() | data.frame() | array () |
| Utilizare tipică | Calcul numeric și algebră liniară | Date observaționale mixte | Tabele stivuite, cum ar fi numărătoarea pe an |
| Etichete de rând | Nume opționale de dim | Numele rândurilor sunt întotdeauna prezente | Nume opționale de dim |
# 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')
Alege o matrice atunci când fiecare celulă are același tip de număr și calculele sunt aritmetice. Alege o cadru de date când coloanele conțin tipuri diferite, de exemplu un nume de caracter lângă un preț numeric și un factorÎntindeți mâna pentru un listă când părțile au lungimi diferite și pentru o matrice când există cu adevărat un al treilea index, cum ar fi timpul sau regiunea. Conversia în ambele direcții este ieftină cu as.matrix() și as.data.frame(), astfel încât structura poate urma sarcina și nu invers.




