V nižšie uvedenom Chunku je urobené základné globálne nastavenie Chunkov v celom Notebooku.
Tento notebook demonštruje základné operácie v jazyku R so:
Tam, kde je to užitočné, sú zahrnuté malé cvičenia.
# Skaláre
## Numerické skaláre
### Priradenie konštanty do premennej
a <- 12
b <- 4.7
## Aritmetika
sum_ab <- a + b # súčet
diff_ab <- a - b # rozdiel
prod_ab <- a * b # násobenie
quot_ab <- a / b # delenie
int_div_ab <- a %/% b # celočíselné delenie
power_ab <- a ^ b # umocňovanie
mod_ab <- a %% b # zvyšok po delení
## Rounding / zaokrúhľovanie
round_b <- round(b) # na najbližšie celé číslo
ceil_b <- ceiling(b) # najbližšie vyššie celé číslo
floor_b <- floor(b) # najbližšie nižšie celé číslo
trunc_b <- trunc(b) # odrezanie desatinnej časti
signif_b <- signif(b, digits=2) # zaokrúhlenie na 2 významné číslice
#### Výpis výsledkov
a; b
sum_ab; diff_ab; prod_ab; quot_ab; int_div_ab; power_ab; mod_ab
round_b; ceil_b; floor_b; trunc_b; signif_b
## Malé cvičenie
#### Zadanie
x <- 23
y <- 6.8
#### 1. Súčet a rozdiel
sum_xy <- x + y
diff_xy <- x - y
#### 2. Celočíselné delenie a modulo
int_div_xy <- x %/% y
mod_xy <- x %% y
#### 3. Zaokrúhľovanie
round_y <- round(y)
trunc_y <- trunc(y)
signif_y <- signif(y, digits=2)
#### Výpis výsledkov
sum_xy; diff_xy
int_div_xy; mod_xy
round_y; trunc_y; signif_y# Text
## Textové premenné – nové príklady
- first <- "Richard"
- last <- "Vladyka"
- full <- paste(first, last) # spojenie s medzerou
- full_nospace <- paste0(first, last) # spojenie bez medzery
- hobby <- paste("Reading", "Sports", "R Programming", sep = ", ") # nové spojenie
### Výpis
first; last; full; full_nospace; hobby
## Dĺžka textu a podreťazce
sentence <- "Learning R is fun!"
nchar(sentence) # počet znakov
substr(sentence, 10, 15) # výber podreťazca
### Nové príkazy
- toupper(first) # celé písmená
- tolower(last) # malé písmená
### Logické hodnoty – nové príklady
- raining <- TRUE
- weekend <- FALSE
# Základné operácie
- !raining # NOT
- raining & weekend # AND
- raining | weekend # OR
- xor(raining, weekend)
## Zložitejšie podmienky
- temperature <- 25
- temperature > 20 & temperature < 30 # súčasne
## Vektor logických hodnôt
conditions <- c(raining, weekend, temperature > 20)
conditions
### Nové príkazy
- all(conditions) # TRUE ak všetky prvky sú TRUE
- any(conditions) # TRUE ak aspoň jeden prvok je TRUE## Malé cvičenie
#### 1. Definovanie textov
city <- "Banska Bystrica"
country <- "Slovakia"
#### 2. Spojenie do jednej vety
sentence <- paste("I live in", city, ",", country, sep = " ")
sentence <- paste0("I live in ", city, ", ", country, ".")
#### 3. Počet znakov
length_sentence <- nchar(sentence)
#### 4. Prvých 10 znakov
first_part <- substr(sentence, 1, 10)
#### 5. Logická kontrola
longer_than_20 <- length_sentence > 20
#### Výpis výsledkov
sentence## [1] "I live in Banska Bystrica, Slovakia."
## [1] 36
## [1] "I live in "
## [1] TRUE
# Numerické vektory
## Generovanie nových vektorov
v1 <- c(3, 6, 9, 12) # vektor so štyrmi číslami zadanými ručne
v2 <- 5:10 # postupnosť čísel od 5 do 10
v3 <- seq(from = 2, to = 3, by = 0.2) # postupnosť 2, 2.2, 2.4,... až do 3
v4 <- rep(7, times = 4) # opakovanie čísla 7 štyrikrát
v5 <- runif(6, min=0, max=10) # 6 náhodných čísiel rovnomerného rozdelenia 0-10
v6 <- rnorm(6, mean=5, sd=2) # 6 náhodných čísiel normálneho rozdelenia so strednou 5 a sd 2
#### Výpis všetkých vektorov
v1; v2; v3; v4; v5; v6
## Aritmetické operácie
v <- c(2, 4, 6, 8)
v + 5 # každý prvok vektora zväčšíme o 5
v * 3 # každý prvok vektora vynásobíme 3
(v + 2)/2 # pridáme 2 a vydelíme 2 – operácia po prvkoch
exp(v) # exponenciálna funkcia e^x pre každý prvok
prod(v) # súčin všetkých prvkov vektora
cumsum(v) # kumulatívna suma prvkov: každý prvok je súčet predchádzajúcich
cumprod(v) # kumulatívny súčin prvkov
rev(v) # obrátenie poradia prvkov vektora
## Operácie s dvoma vektormi rovnakého rozmeru
length(v2) # počet prvkov vo vektore v2
length(v5) # počet prvkov vo vektore v5
v2 + v5 # sčítanie dvoch vektorov po prvkoch (musí byť rovnaký rozmer)
## Indexovanie a výber prvkov
x <- c(8, 15, 4, 20, 7, 0, 12)
x[1] # prvý prvok vektora
x[3:5] # tretí až piaty prvok
x[-2] # všetky prvky okrem druhého
x[x > 10] # výber prvkov väčších ako 10
which(x > 10) # pozície prvkov väčších ako 10
## Práca s chýbajúcimi hodnotami
y <- c(2, NA, 4, NA, 8)
is.na(y) # TRUE pre chýbajúce hodnoty (NA)
mean(y) # výsledok je NA, lebo vektory obsahujú NA
mean(y, na.rm = TRUE) # pri výpočte priemeru ignorujeme NA
## Základné štatistiky
z <- c(5, 12, 7, 9, 3)
mean(z) # priemer
sd(z) # štandardná odchýlka
median(z) # medián
max(z) # maximálna hodnota
min(z) # minimálna hodnota
summary(z) # rýchly prehľad štatistík: min, 1st Qu., median, mean, 3rd Qu., max
sort(z) # zoradenie vzostupne
sort(z, decreasing = TRUE) # zoradenie zostupne## Malé cvičenie
#### Numerické vektory – vlastné cvičenie
#### 1. Definovanie vektorov
temps <- c(15, 22, NA, 18, 25, 20)
rainfall <- c(0, 5, 3, 2, 0, 1)
#### 2. Priemer a medián teplôt (NA ignorujeme)
mean_temps <- mean(temps, na.rm = TRUE)
median_temps <- median(temps, na.rm = TRUE)
#### 3. Celkový súčet zrážok
total_rainfall <- sum(rainfall)
#### 4. Teploty väčšie ako 20
high_temps <- temps[temps > 20] # automaticky ignoruje NA
positions_high <- which(temps > 20) # pozície prvkov > 20
#### 5. Kumulatívna suma zrážok
cumsum_rainfall <- cumsum(rainfall)
#### 6. Zoradenie teplôt (vzostupne a zostupne)
sorted_temps_asc <- sort(temps, na.last = TRUE)
sorted_temps_desc <- sort(temps, decreasing = TRUE, na.last = TRUE)
#### Výpis výsledkov
mean_temps; median_temps## [1] 20
## [1] 20
## [1] 11
## [1] 22 NA 25
## [1] 2 5
## [1] 0 5 8 10 10 11
## [1] 15 18 20 22 25 NA
## [1] 25 22 20 18 15 NA
# Matice
## Vytvorenie matíc
m <- matrix(10:21, nrow = 4, ncol = 3) # hodnoty sú zadané po stĺpcoch
m_byrow <- matrix(10:21, nrow = 4, byrow = TRUE) # hodnoty zadané po riadkoch
m; m_byrow # výpis matíc
## Rozmery matice
dim(m) # počet riadkov a stĺpcov
nrow(m) # počet riadkov
ncol(m) # počet stĺpcov
## Adresovanie prvkov matice
m[2, 3] # prvok na 2. riadku a 3. stĺpci
m[, 1] # všetky prvky 1. stĺpca
m[3, ] # všetky prvky 3. riadku
m[2:3, 2:3] # podmatica: riadky 2-3, stĺpce 2-3
## Maticové operácie
A <- matrix(c(2,4,1,3), nrow = 2)
B <- matrix(c(5,2,7,6), nrow = 2)
A + B # sčítanie matíc po prvkoch
A * B # Hadamardov súčin (po prvkoch)
A %*% B # klasické násobenie matíc
t(A) # transpozícia matice (riadky ↔ stĺpce)
det(A) # determinant matice
solve(A) # inverzia matice (ak je regulárna)
rowSums(A) # suma po riadkoch
colSums(B) # suma po stĺpcoch
### Zlučovanie vektorov do matíc
C <- cbind(2:4, 5:7) # spájanie po stĺpcoch
D <- rbind(2:4, 5:7) # spájanie po riadkoch
C; D
## Vypočítanie zvolenej štatistiky po riadkoch a stĺpcoch
M <- matrix(5:16, nrow = 4)
M
apply(M, 1, mean) # priemery po riadkoch
apply(M, 2, sum) # súčet po stĺpcoch## Malé cvičenie
#### 1. Vytvorte maticu 3x4 s hodnotami 11..22 po riadkoch
#### 2. Vypočítajte priemer po riadkoch a súčet po stĺpcoch
#### 3. Vytvorte transpozíciu a vynásobte pôvodnú maticu
M_ex <- matrix(11:22, nrow = 3, byrow = TRUE)
row_means_ex <- apply(M_ex, 1, mean)
col_sums_ex <- apply(M_ex, 2, sum)
product_ex <- M_ex %*% t(M_ex)
#### Výpis výsledkov
M_ex## [,1] [,2] [,3] [,4]
## [1,] 11 12 13 14
## [2,] 15 16 17 18
## [3,] 19 20 21 22
## [1] 12.5 16.5 20.5
## [1] 45 48 51 54
## [,1] [,2] [,3]
## [1,] 630 830 1030
## [2,] 830 1094 1358
## [3,] 1030 1358 1686
# Môj návrh použitia: novinky
## Definovanie údajov
temps <- c(15, 22, NA, 18, 25, 20) # teploty počas 6 dní
rainfall <- c(0, 5, 3, 2, 0, 1) # zrážky počas 6 dní
#### 1. Kombinované filtrovanie: dni s teplotou >20 a žiadnymi zrážkami
hot_dry <- temps[temps > 20 & rainfall == 0] # vyber prvkov splňujúcich obe podmienky
hot_dry_positions <- which(temps > 20 & rainfall == 0) # pozície týchto dní
#### 2. Identifikácia extrémnych hodnôt
max_temp <- temps[which.max(temps)] # najvyššia teplota
min_rain <- rainfall[which.min(rainfall)] # najnižšie zrážky
#### 3. Jednoduchá vizualizácia
barplot(temps, names.arg = paste("Day", 1:6), col = "skyblue",
main = "Denné teploty", ylab = "°C")
#### Výpis výsledkov
hot_dry
hot_dry_positions
max_temp
min_rain