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
Cotton, R.: Learning R. USA: O’Reilly Media, 2013. ISBN-13: 978-1449357108
