Vektory, matice a polia

Vektory

Vektor je základná a usporiadaná množina hodnôt rovnakého dátového typu. V jazyku R ho vytvárame pomocou funkcie c(), pričom zadávame jeho jednotlivé prvky – dĺžka sa určí automaticky podľa ich počtu. Písmeno „c“ je skratkou z latinského concatenare, čo znamená „spojiť dohromady“. Ku konkrétnym prvkom vektora pristupujeme pomocou indexov, pričom indexovanie v R začína od 1.

Príklady

Vytvorenie vektora s číslami 11,12,13,14,15,16 a prístup k jeho prvkom:

x <- a <- c(11, 12, 13, 14, 15, 16) a #výpis vektora [1] 11 12 13 14 15 16 a[2] #výpis prvku vektora na indexe 2 [1] 12

Vytvorenie vektora s číslami od 3 do 11 a prístup k jeho prvkom:

b <- 3:11 b #výpis vektora [1] 3 4 5 6 7 8 9 10 11 b[2:4] #výpis podvektora z vektoru b [1] 4 5 6 b < 5 #výpis prvkov, ktoré sú menšie ako 5 [1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE b[b >= 9] #výpis prvkov, ktoré sú väčšie alebo rovné ako 9 [1] 9 10 11

Pri vytváraní vektorov v jazyku R je dôležité dávať pozor na to, aby všetky prvky mali rovnaký dátový typ. Ak sa pokúsime vytvoriť vektor, ktorý obsahuje prvky rôznych typov (napr. numeric, boolean a string), R automaticky zabezpečí ich konverziu na jednotný typ – podľa najvyššej úrovne všeobecnosti. V takomto prípade dôjde k tomu, že všetky prvky budú pretypované na textový (string) typ, aby bol vektor interné konzistentný.

c(111, TRUE, "slovo") c # výpis vektora [1] "111" "TRUE" "slovo"

Matice

Matica predstavuje dvojrozmerný vektor, teda usporiadanú množinu hodnôt s definovaným počtom riadkov a stĺpcov. V jazyku R ju môžeme vytvoriť napríklad pomocou funkcie matrix(), kde priamo zadáme počet riadkov a stĺpcov spolu s dátami, ktoré má obsahovať.

Príklad

Vytvoríme maticu s 9 náhodne vygenerovanými hodnotami, pričom stredná hodnota bude 100 a smerodajná odchýlka 50. Na generovanie týchto údajov použijeme funkciu rnorm(), ktorá má nasledujúce parametre: rnorm(počet, stredná_hodnota, smerodajná_odchýlka).

mat_a <- matrix(rnorm(9, 100, 50), nrow = 3)

Ak chceme zaokrúhliť všetky hodnoty v matici na jedno desatinné miesto, môžeme použiť jednoduchý for cyklus . Ten prejde každý prvok matice a aplikuje funkciu round().

for(i in 1:length(mat_a)) mat_a[i] <- round(mat_a[i], 1) mat_a

Výsledná matica bude vyzerať takto:

[,1] [,2] [,3]
[1,] 117.9 108.4 120.2
[2,] 154.8 83.3 75.7
[3,] 192.1 79.2 81.9

Načítanie hodnôt matice

Vytvorenie 3×3 matice mat_b zadaním hodnôt po stĺpcoch. Funkcia matrix() berie vstupné hodnoty a rozmiestňuje ich do riadkov a stĺpcov podľa zadaných rozmerov.

mat_b <- matrix(c(2, 3, -2, 1, 2, 2, 1, 3, 2), 3, 3)

Transponovanie matice

Transponovanie matice mat_b, pri ktorom sa riadky zmenia na stĺpce a naopak. Funkcia t() vracia transponovanú maticu mat_t.

mat_t <- t(mat_b)

Výpočet inverznej matice

Vypočítanie inverznej matice k mat_bpomocou funkcie solve(). Inverzná matica mat_inv existuje len vtedy, ak je pôvodná matica regulárna (má nenulový determinant).

mat_inv <- solve(mat_b)

Výpočet inverznej matice pomocou funkcie ginv()

Vypočítanie generalizovanej inverznej matice pomocou funkcie ginv() z balíka MASS. Táto metóda sa používa, ak matica nie je regulárna (nemá klasickú inverziu).

library(MASS) mat_inv <- ginv(mat_b)

Výsledná inverzná matica bude vyzerať takto:

[,1] [,2] [,3]
[1,] 0.333 0 -0.167
[2,] 2.000 -1 0.500
[3,] -1.667 1 -0.167

Overenie správnosti výpočtu inverznej matice

Overenie správnosti výpočtu inverznej matice. Vynásobením inverznej matice mat_inv jej spätnou inverziou by sme mali získať jednotkovú maticu. Výsledok je zaokrúhlený na jedno desatinné miesto pre prehľadnosť.

mat_jedn <- solve(mat_inv) %*% mat_inv for(i in 1:length(mat_jedn)) mat_jedn[i] <- round(mat_jedn[i], 1) mat_jedn

Výsledná jednotková matica po overení inverzie:

[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1

Zaokrúhľovanie hodnôt matice

Postupné zaokrúhlenie všetkých hodnôt v inverznej matici mat_inv na tri desatinné miesta pomocou for cyklu a funkcie round(). Takto upravené hodnoty sú vhodné na prehľadné zobrazenie pri práci s reálnymi číslami.

for(i in 1:length(mat_inv)) mat_inv[i] <- round(mat_inv[i], 3) # zaokrúhlenie na 3 desatinné miesta

Výpočet determinantu matice

Výpočet determinantu matice mat_b pomocou funkcie det(). Determinant je dôležitý pri posudzovaní, či je matica regulárna (má inverznú maticu) a pri riešení sústav lineárnych rovníc.

det_mat <- det(mat_b)

Sčítanie dvoch matíc

Sčítanie dvoch rovnakých matíc mat_b pomocou operátora +. Výsledkom je matica, ktorej prvky sú súčtom zodpovedajúcich prvkov oboch matíc.

sucet <- mat_b + mat_b

Násobenie dvoch matíc

Násobenie matice mat_b so sebou samou pomocou operátora %*%, ktorý vykonáva maticové násobenie. Výsledkom je nová matica, kde každý prvok vzniká výpočtom skalárneho súčinu riadkov a stĺpcov pôvodných matíc.

sucin <- mat_b %*% mat_b

Násobenie matice konštantou

Násobenie všetkých prvkov matice mat_b konštantou -1. Výsledkom je matica, kde sú všetky hodnoty opačné oproti pôvodným.

sucin_konst <- mat_b * (-1) # konštanta = -1

Počet riadkov a stĺpcov matice

Zistenie rozmerov matice mat_b pomocou funkcie dim(). Výstupom je dvojica: počet riadkov a počet stĺpcov.

dim(mat_b)

Počet riadkov matice

Zistenie počtu riadkov v matici mat_b pomocou funkcie nrow().

nrow(mat_b)

Počet stĺpcov matice

Zistenie počtu stĺpcov v matici mat_b pomocou funkcie ncol().

ncol(mat_b)

Priemerné hodnoty stĺpcov

Výpočet priemerných hodnôt jednotlivých stĺpcov matice mat_b pomocou funkcie colMeans().

colMeans(mat_b)

Priemerné hodnoty riadkov

Výpočet priemerných hodnôt jednotlivých riadkov matice mat_b pomocou funkcie rowMeans().

rowMeans(mat_b)

Spájanie matíc

Spájanie dvoch matíc mat_b vedľa seba pomocou funkcie cbind(). Výsledkom je nová matica, ktorá má dvojnásobný počet stĺpcov.

spojene <- cbind(mat_b, mat_b)

Výsledná matica po spájaní pomocou cbind() vyzerá nasledovne:

[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 2 1 1 2 1 1
[2,] 3 2 3 3 2 3
[3,] -2 2 -2 2 -2 2

Polia

Polia v jazyku R predstavujú viacrozmerné vektory. Matice, ktoré poznáme z predchádzajúcich príkladov, sú špeciálnym prípadom – konkrétne dvojrozmerné polia. Na vytvorenie poľa slúži funkcia array(), ktorej zadáme vektor hodnôt a vektor rozmerov. Každému rozmeru môžeme navyše priradiť vlastné názvy pomocou parametra dimnames.

troj_rozmerne_pole <- array( 1:24, # hodnoty od 1 po 24 dim = c(4, 3, 2), # rozmery poľa dimnames = list( # názvy dimenzií c("one", "two", "three", "four"), c("ein", "zwei", "drei"), c("prvá", "druhá") ) )

Výpis trojrozmerného poľa

Pri vypísaní poľa troj_rozmerne_pole sa hodnoty zobrazia podľa tretieho rozmeru (vrstvy). Nižšie sú zobrazené dve vrstvy: „prvá“ a „druhá“.

, , prvá

       ein zwei drei
one      1    5     9
two      2    6    10
three    3    7    11
four     4    8    12

, , druhá

       ein zwei drei
one     13   17    21
two     14   18    22
three   15   19    23
four    16   20    24
  
Zdroje:
Cotton, R.: Learning R. USA: O’Reilly Media, 2013. ISBN-13: 978-1449357108

🔍