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.

  • 🧩 Structura: O matrice este un vector cu atributul dim, deci fiecare celulă trebuie să partajeze același tip de date.
  • 🛠️ Creare: matrix(data, nrow, ncol, byrow) aranjează o secvență, iar R deduce dimensiunea lipsă.
  • 🔄 Completați comanda: byrow = FALSE umple coloană cu coloană, în timp ce byrow = TRUE umple rând cu rând.
  • ➕ Creştere: cbind() adaugă coloane, iar rbind() adaugă rânduri, cu condiția ca dimensiunea partajată să se potrivească.
  • ✂ Tăiere: m[rând, coloană] citește mai întâi rândurile, iar o parte goală selectează tot ce se află pe acea parte.
  • 🏷️ etichete: dimnames, rownames() și colnames() înlocuiesc substituenții [,1] cu nume lizibile.
  • ➕➖ Aritmetic: Asteriscul înmulțește element cu element, în timp ce %*% efectuează înmulțirea matricei.

Funcția Matrice în R Creare Print adăugare coloană și felie

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.

Aranjamentul pe rânduri și coloane al unei funcții matriceale în R

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.

Ieșirea consolei pentru matrix_a este umplută rând cu rând cu byrow = TRUE

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:

Ieșirea consolei pentru matrix_b a fost umplută coloană cu coloană cu byrow = FALSE

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

Rezultatele consolei pentru cele patru expresii de feliere a matricei în R

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.

Întrebări frecvente

R reciclează valorile în loc să le respingă, așa că matrix(1:3, nrow = 2, ncol = 3) repetă secvența. Un avertisment apare numai atunci când lungimea nu este un multiplu exact al numărului de celule, ceea ce face ca reciclarea silențioasă să fie o eroare ușor de trecut cu vederea.

Folosește un indice negativ: m[-2, ] elimină al doilea rând și m[, -3] elimină a treia coloană. Pot fi introduse mai multe rânduri simultan cu m[-c(1, 4), ]. Obiectul original rămâne neschimbat până când nu atribui rezultatul înapoi.

Selectarea unui singur rând sau a unei singure coloane elimină implicit dimensiunea goală. Adăugați drop = FALSE, ca în m[1, , drop = FALSE], pentru a păstra o matrice cu un singur rând. Acest lucru este important atunci când rezultatul este transmis unei funcții care așteaptă două dimensiuni.

which(m == value, arr.ind = TRUE) returnează un rezultat pe două coloane care indică rândul și coloana fiecărei corespondențe. Fără arr.ind, răspunsul este un singur index liniar numărat în jos pe coloane, ceea ce este rareori ceea ce doriți.

Folosește array(data, dim = c(rows, columns, layers)) sau atribuie dim(x) direct unui vector. Secționarea preia apoi un index per dimensiune, cum ar fi a[2, 3, 1]. O matrice este pur și simplu cazul bidimensional al unui tablou.

Da. Referința de bază R precizează că rowSums și colMeans sunt echivalente cu apply() cu sum sau mean, dar mult mai rapide și ambele depășesc o buclă for explicită, deoarece iterația are loc în codul compilat și nu în interpretor.

Ajustarea modelului este algebră liniară: caracteristicile formează o matrice, coeficienții formează un vector, iar predicția este un singur produs procentual. Multe masina de învățare Prin urmare, pachetele necesită ca intrare o matrice numerică mai degrabă decât un cadru de date.

Da. Copilotul GitHub rulează în RStudio 2023.09.0 și versiuni ulterioare și completează codul din comentariile din fișierul deschis. Verificați logica dimensiunii sale în RStudio, deoarece o matrice greșită produce în continuare o matrice validă.

Rezumați această postare cu: