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_b
pomocou 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