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 —

Balíky

library(tidyverse)
library(stringr)

1. Skaláre (jednotlivé hodnoty)

1.1 Numerické hodnoty

# 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

## Malé cvičenie – aritmetika

Ú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

1.2 Logické hodnoty

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

## Malé cvičenie – logika

Ú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

1.3 Textové (reťazcové) hodnoty

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Á"

## Malé cvičenie – texty

Ú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

2. Vektory

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

## Malé cvičenie – vektorový výber

Ú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

3. Matice

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

## Malé cvičenie – práca s maticami

Ú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

4. Pretypovanie a kontrola typu

# 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

5. Môj návrh použitia novinky

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

Príloha: sessionInfo

## 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