title: “Cvičenie 2” author: “Hana Belohorcova” date: “03.11.2025” output: html_document: toc: true toc_depth: 2 toc_float: true number_sections: true theme: cosmo —
library(tidyverse)
library(stringr)
# Vlastné hodnoty
x <- 7
pi_approx <- 3.14159
u <- -2.5
# Základné operácie
suma <- x + u
sucin <- x * 2
mocnina <- x^3
odmocnina <- sqrt(x)
# Porovnanie
je_vacsie <- x > abs(u)
list(
x = x,
pi_approx = pi_approx,
u = u,
suma = suma,
sucin = sucin,
mocnina = mocnina,
odmocnina = odmocnina,
je_vacsie = je_vacsie
)
## $x
## [1] 7
##
## $pi_approx
## [1] 3.14159
##
## $u
## [1] -2.5
##
## $suma
## [1] 4.5
##
## $sucin
## [1] 14
##
## $mocnina
## [1] 343
##
## $odmocnina
## [1] 2.645751
##
## $je_vacsie
## [1] TRUE
Úloha: Zmenou x a u
dosiahni, aby mocnina bola väčšia ako 1000 a
je_vacsie bolo FALSE.
Riešenie (moje príkladové):
x <- 11
u <- -20
mocnina <- x^3
je_vacsie <- x > abs(u)
list(mocnina = mocnina, je_vacsie = je_vacsie)
## $mocnina
## [1] 1331
##
## $je_vacsie
## [1] FALSE
a <- TRUE
b <- FALSE
konjunkcia <- a && b
alternativa <- a || b
negacia <- !b
# Porovnania vracajú logické hodnoty
porovnanie <- 10 <= 10
list(konjunkcia = konjunkcia, alternativa = alternativa,
negacia = negacia, porovnanie = porovnanie)
## $konjunkcia
## [1] FALSE
##
## $alternativa
## [1] TRUE
##
## $negacia
## [1] TRUE
##
## $porovnanie
## [1] TRUE
Úloha: Nastav a, b tak,
aby konjunkcia bola TRUE a
alternativa bola tiež TRUE.
Riešenie (príklad):
a <- TRUE
b <- TRUE
list(konjunkcia = a && b, alternativa = a || b)
## $konjunkcia
## [1] TRUE
##
## $alternativa
## [1] TRUE
meno <- "Anna"
priezvisko <- "Nováková"
cele_meno <- paste(meno, priezvisko)
# Dĺžka reťazca a práca s veľkosťou písmen
pocet_znakov <- str_length(cele_meno)
velke <- str_to_upper(cele_meno)
list(cele_meno = cele_meno, pocet_znakov = pocet_znakov, velke = velke)
## $cele_meno
## [1] "Anna Nováková"
##
## $pocet_znakov
## [1] 13
##
## $velke
## [1] "ANNA NOVÁKOVÁ"
Úloha: Vytvor premennú pozdrav z častí
"Ahoj", meno a "!" tak, aby
výsledok bol napr. “Ahoj Anna!” (medzera pred menom). Spočítaj počet
znakov.
Riešenie (príklad):
pozdrav <- paste("Ahoj", meno, "!")
str_length(pozdrav)
## [1] 11
Vektor je usporiadaná postupnosť hodnôt rovnakého typu.
# Numerický vektor
vek <- c(20, 21, 21, 22, 23, 19)
# Indexovanie a základné operácie
prvy <- vek[1]
posledne_tri <- tail(vek, 3)
priemer <- mean(vek)
# Logické filtrovanie (výber prvkov podľa podmienky)
plnolety <- vek >= 21
vek_plnoletych <- vek[plnolety]
list(prvy = prvy, posledne_tri = posledne_tri, priemer = priemer,
plnolety = plnolety, vek_plnoletych = vek_plnoletych)
## $prvy
## [1] 20
##
## $posledne_tri
## [1] 22 23 19
##
## $priemer
## [1] 21
##
## $plnolety
## [1] FALSE TRUE TRUE TRUE TRUE FALSE
##
## $vek_plnoletych
## [1] 21 21 22 23
Úloha: Vytvor vektor
teploty <- c(13, 15, 18, 21, 23, 19, 16) a vyber len
hodnoty nad 18. Spočítaj priemer vybraných.
Riešenie (príklad):
teploty <- c(13, 15, 18, 21, 23, 19, 16)
vybrane <- teploty[teploty > 18]
mean(vybrane)
## [1] 21
Matica je 2D tabuľka s rovnakým typom prvkov.
# Vytvorenie matice 2x3 po stĺpcoch
A <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
# Vytvorenie matice 3x2 po riadkoch
B <- matrix(c(7, 8, 9, 10, 11, 12), nrow = 3, ncol = 2, byrow = TRUE)
rozmery_A <- dim(A)
rozmery_B <- dim(B)
transponovana_A <- t(A)
sucin_C <- A %*% B # 2x3 %*% 3x2 -> 2x2
list(rozmery_A = rozmery_A, rozmery_B = rozmery_B,
transponovana_A = transponovana_A, sucin_C = sucin_C)
## $rozmery_A
## [1] 2 3
##
## $rozmery_B
## [1] 3 2
##
## $transponovana_A
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
##
## $sucin_C
## [,1] [,2]
## [1,] 89 98
## [2,] 116 128
Úloha: Vytvor jednotkovú maticu I
veľkosti 3 a over, že I %*% transponovana_A vráti
transponovana_A (ak majú kompatibilné rozmery, uprav
A).
Riešenie (príklad):
I <- diag(3)
A <- matrix(1:9, nrow = 3, byrow = TRUE) # 3x3
I %*% A
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
# Kontrola typov
is_numeric_x <- is.numeric(x)
is_logical_a <- is.logical(a)
is_character_meno <- is.character(meno)
# Pretypovanie
cislo_ako_text <- as.character(123)
text_na_cislo <- as.numeric("3.14")
logika_na_cislo <- as.numeric(c(TRUE, FALSE, TRUE))
list(is_numeric_x = is_numeric_x,
is_logical_a = is_logical_a,
is_character_meno = is_character_meno,
cislo_ako_text = cislo_ako_text,
text_na_cislo = text_na_cislo,
logika_na_cislo = logika_na_cislo)
## $is_numeric_x
## [1] TRUE
##
## $is_logical_a
## [1] TRUE
##
## $is_character_meno
## [1] TRUE
##
## $cislo_ako_text
## [1] "123"
##
## $text_na_cislo
## [1] 3.14
##
## $logika_na_cislo
## [1] 1 0 1
Tu demonštrujem niečo naviac: kombináciu logického
filtrovania a vektorových operácií so zreťazením |> a
pomenovanými argumentmi.
Cieľ: Z numerického vektora odstrániť outliery podľa medzikvartilového rozpätia a vypočítať priemer bez nich (jednoriadková funkcia).
remove_outliers_mean <- function(x, k = 1.5) {
# "Novinka": použitie IQR filtra v jednej rúrke s pomenovanými argumentmi
qs <- quantile(x, probs = c(0.25, 0.75), names = FALSE)
iqr <- qs[2] - qs[1]
x[ x >= (qs[1] - k * iqr) & x <= (qs[2] + k * iqr) ] |> mean(na.rm = TRUE)
}
set.seed(123)
v <- c(rnorm(20, mean = 10, sd = 2), 40) # zámerný extrém
list(priemer = mean(v), priemer_bez_outlierov = remove_outliers_mean(v))
## $priemer
## [1] 11.69833
##
## $priemer_bez_outlierov
## [1] 10.28325
## R version 4.5.1 (2025-06-13)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 20.04.6 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/liblapack.so.3; LAPACK version 3.9.0
##
## locale:
## [1] LC_CTYPE=C.UTF-8 LC_NUMERIC=C LC_TIME=C.UTF-8
## [4] LC_COLLATE=C.UTF-8 LC_MONETARY=C.UTF-8 LC_MESSAGES=C.UTF-8
## [7] LC_PAPER=C.UTF-8 LC_NAME=C LC_ADDRESS=C
## [10] LC_TELEPHONE=C LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C
##
## time zone: UTC
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] lubridate_1.9.4 forcats_1.0.1 stringr_1.5.2 dplyr_1.1.4
## [5] purrr_1.1.0 readr_2.1.5 tidyr_1.3.1 tibble_3.3.0
## [9] ggplot2_4.0.0 tidyverse_2.0.0
##
## loaded via a namespace (and not attached):
## [1] gtable_0.3.6 jsonlite_2.0.0 compiler_4.5.1 tidyselect_1.2.1
## [5] jquerylib_0.1.4 scales_1.4.0 fastmap_1.2.0 R6_2.6.1
## [9] generics_0.1.4 knitr_1.50 bslib_0.9.0 pillar_1.11.1
## [13] RColorBrewer_1.1-3 tzdb_0.5.0 rlang_1.1.6 stringi_1.8.7
## [17] cachem_1.1.0 xfun_0.54 sass_0.4.10 S7_0.2.0
## [21] timechange_0.3.0 cli_3.6.5 withr_3.0.2 magrittr_2.0.4
## [25] digest_0.6.37 grid_4.5.1 rstudioapi_0.17.1 hms_1.1.4
## [29] lifecycle_1.0.4 vctrs_0.6.5 evaluate_1.0.5 glue_1.8.0
## [33] farver_2.1.2 rmarkdown_2.30 tools_4.5.1 pkgconfig_2.0.3
## [37] htmltools_0.5.8.1