vklad <- 1250
rocna_sadzba <- 0.035
roky <- 4
buduca_hodnota <- vklad * (1 + rocna_sadzba)^roky
buduca_hodnota[1] 1434.404
Tento html dokument je stručným cvičením zo základných príkazov v R. Z vytvoreného .Rmd dokumentu som vybrala na ukážku prácu so skalármi, numerickými vektormi, maticami a vlastnými číslami. Na konci každej sekcie je malé cvičenie, ktoré je následne aj vyriešené v jazyku R.
Skalár je jedna číselná hodnota, na rozdiel od vektora, ktorý v sebe nesie aj informáciu o smere. Základné aritmetické operátory na prácu so skalármi sú +, -, *, / a ^; operátor %% určí zvyšok po delení.
vklad <- 1250
rocna_sadzba <- 0.035
roky <- 4
buduca_hodnota <- vklad * (1 + rocna_sadzba)^roky
buduca_hodnota[1] 1434.404
Na začiatku roka mala firma príjem 2 400 eur. V druhom štvrťroku sa príjem zvýšil o 15 %, v treťom klesol o 8 % a vo štvrtom opäť vzrástol o 10 %. Vypočítajte príjem na konci roka.
prijem_zaciatok <- 2400
prijem_koniec <- prijem_zaciatok * 1.15 * 0.92 * 1.10
round(prijem_koniec, 2)[1] 2793.12
Vektor vytvoríme napríklad pomocou c(), postupnosť celých čísel pomocou : a pravidelnú postupnosť funkciou seq(). Pri výbere prvkov môžeme použiť logickú podmienku v hranatých zátvorkách.
predaje <- c(42, 51, 47, 63, 58, 69)
mesiace <- 1:6
predaje_nad_55 <- predaje[predaje > 55]
mesiace; predaje; predaje_nad_55[1] 1 2 3 4 5 6
[1] 42 51 47 63 58 69
[1] 63 58 69
mean(predaje)[1] 55
Vytvorte vektor denných teplôt od -6 do 12 stupňov. Vyberte iba teploty deliteľné tromi a vypočítajte ich súčet. Zistite tiež, koľko takých dní vektor obsahuje.
teploty <- -6:12
nasobky_troch <- teploty[teploty %% 3 == 0]
nasobky_troch[1] -6 -3 0 3 6 9 12
sum(nasobky_troch)[1] 21
length(nasobky_troch)[1] 7
Matica je usporiadaná tabuľka hodnôt. Funkcia matrix() ju vytvorí, rowSums() a colSums() vypočítajú súčty po riadkoch a stĺpcoch. Transpozíciu vytvorí t() a %*% znamená maticové násobenie.
A <- matrix(c(2, 1,
1, 3), nrow = 2, byrow = TRUE) # nrow - pocet riadkov
# byrow - hodnoty sa zadaju po riadkoch
B <- matrix(c(4, 0,
2, 5), nrow = 2, byrow = TRUE)
A + B [,1] [,2]
[1,] 6 1
[2,] 3 8
A %*% B [,1] [,2]
[1,] 10 5
[2,] 10 15
t(A) [,1] [,2]
[1,] 2 1
[2,] 1 3
Do matice \(M\) s tromi riadkami a štyrmi stĺpcami vložte po riadkoch hodnoty 3 až 14. Vypočítajte súčty v jednotlivých stĺpcoch a maticu \(M^T M\).
M <- matrix(3:14, nrow = 3, ncol = 4, byrow = TRUE)
M [,1] [,2] [,3] [,4]
[1,] 3 4 5 6
[2,] 7 8 9 10
[3,] 11 12 13 14
colSums(M)[1] 21 24 27 30
t(M) %*% M [,1] [,2] [,3] [,4]
[1,] 179 200 221 242
[2,] 200 224 248 272
[3,] 221 248 275 302
[4,] 242 272 302 332
Pre štvorcovú maticu \(A\) sú vlastné číslo \(\lambda\) a vlastný vektor \(v\) (nenulový) také, že platí
\[A v = \lambda v.\]
V R ich vypočíta funkcia eigen(). Objekt vytvorený touto funkciou obsahuje vlastné čísla v položke $values a vlastné vektory v položke $vectors.
A <- matrix(c(3, 1,
1, 3), nrow = 2, byrow = TRUE)
eigen_A <- eigen(A)
eigen_A$values[1] 4 2
eigen_A$vectors [,1] [,2]
[1,] 0.7071068 -0.7071068
[2,] 0.7071068 0.7071068
Pre maticu
\[C = \begin{pmatrix} 6 & 2 \\ 2 & 6 \end{pmatrix}\]
určite vlastné čísla a vlastné vektory a určte jej kovariančnú maticu. Následne overte vzťah \(Cv_1 = \lambda_1v_1\) pre prvý vlastný vektor.
C <- matrix(c(6, 2,
2, 6), nrow = 2, byrow = TRUE)
eigen_C <- eigen(C)
# Vlastné čísla a k nim prislúchajúce vlastné vektory
eigen_C$values[1] 8 4
eigen_C$vectors [,1] [,2]
[1,] 0.7071068 -0.7071068
[2,] 0.7071068 0.7071068
# Kovariančná matica
cov_matrix <- cov(C)
cov_matrix [,1] [,2]
[1,] 8 -8
[2,] -8 8
# Overenie rovnosti pre prvý vlastný pár
lambda_1 <- eigen_C$values[1]
v_1 <- eigen_C$vectors[, 1]
C %*% v_1 [,1]
[1,] 5.656854
[2,] 5.656854
lambda_1 * v_1[1] 5.656854 5.656854
V cvičení boli použité skalárne výpočty, tvorba a filtrovanie numerických vektorov, práca s maticami a výpočet vlastných čísel a vektorov.