V nižšie uvedenom Chunku je urobené základné globálne nastavenie Chunkov v celom Notebooku.
# Priradenie konštánt do premenných
a <- 5
b <- 12.5
# Aritmetika
sum_ab <- a + b # súčet
diff_ab <- a - b # rozdiel
prod_ab <- a * b # násobenie
quot_ab <- a / b # delenie (reálne)
power_ab <- a ^ b # mocnina
# Modulo a celočíselné delenie (príklad s celým deliteľom)
mod_a5 <- a %% 5 # zvyšok po delení piatimi
int_div_a5 <- a %/% 5 # celočíselné delenie (floor(a/5))
# Zaokrúhľovanie
round_b <- round(b) # na najbližšie celé číslo
ceil_b <- ceiling(b) # nahor
floor_b <- floor(b) # nadol
a; b[1] 5
[1] 12.5
[1] 17.5
[1] -7.5
[1] 62.5
[1] 0.4
[1] 545915034
[1] 0
[1] 1
[1] 12
[1] 13
[1] 12
first <- "Sára"
middle <- "Nikol"
last <- "Scholtzová"
full <- paste(first,middle, last) # spojenie s medzerou
full_nospace <- paste0(first, middle, last) # bez medzery
csv_line <- paste("Auto", "Bicykel", "Motorka", sep = ",") # vlastný oddeľovač
first; middle; last; full; full_nospace; csv_line[1] "Sára"
[1] "Nikol"
[1] "Scholtzová"
[1] "Sára Nikol Scholtzová"
[1] "SáraNikolScholtzová"
[1] "Auto,Bicykel,Motorka"
[1] 20
[1] "Ekonome"
[1] "MILUJEM SLOVENSKO"
[1] "milujem slovensko"
[1] "Cesta okolo Sveta"
Nech name <- “Janko Mrkvička”. Vypíšte priezvisko ako podreťazec a vytvorte reťazec label v tvare “Priezvisko: Mrkvička (dĺžka: 8)”.
name <- "Janko Mrkvička"
surname <- sub(".* ", "", name) # všetko po poslednej medzere
label <- paste0("Priezvisko: ", toupper(surname),
" (dĺžka: ", nchar(surname), ")")
surname; label[1] "Mrkvička"
[1] "Priezvisko: MRKVIČKA (dĺžka: 8)"
[1] FALSE
[1] FALSE
[1] TRUE
[1] TRUE
[1] FALSE
[1] TRUE
[1] TRUE
[1] TRUE
[1] FALSE
[1] TRUE
[1] FALSE
Majte premennú temp <- 18. Vytvorte dve logické premenne: is_room_temp je TRUE, ak je temp v intervale <18; 24>, is_cold_or_hot je TRUE, ak je temp < 18 alebo temp > 24.
temp <- 15
is_room_temp <- (temp >= 18) & (temp <= 24)
is_cold_or_hot <- (temp < 18) | (temp > 24)
is_room_temp; is_cold_or_hot[1] FALSE
[1] TRUE
# 1) Celočíselné delenie a modulo spolu:
# Rozložme 137 minút na hodiny a zvyšné minúty.
minutes <- 137
hours <- minutes %/% 60
rem <- minutes %% 60
sprintf("%d min = %d h %d min", minutes, hours, rem)[1] "137 min = 2 h 17 min"
# 2) Základné vyhľadávanie vzoru v texte (base R)
cities <- c("Bratislava", "Košice", "Banská Bystrica", "Brno")
grepl("^B", cities) # začína na 'B'?[1] TRUE FALSE TRUE TRUE
[1] "Bratislava"
# 3) Pekné formátovanie textu s číslami cez sprintf()
pi_val <- pi
sprintf("π ≈ %.4f", pi_val) # 4 desatinné miesta[1] "π ≈ 3.1416"
[1] "Počet: 007 kusy"
set.seed(123) # aby náhodné príklady boli reprodukovateľné
v1 <- c(3,6,1,9)
v2 <- 1:5 # postupnosť 1,2,3,4,5
v3 <- seq(from = 0, to = 1, by = 0.5) # postupnosť s krokom 0.5
v4 <- rep(1, times = 5) # 1,1,1,1,1
v5 <- runif(3) # U[0,1]
v6 <- rnorm(3) # N(0,1)
v1; v2; v3; v4; v5; v6[1] 3 6 1 9
[1] 1 2 3 4 5
[1] 0.0 0.5 1.0
[1] 1 1 1 1 1
[1] 0.2875775 0.7883051 0.4089769
[1] 1.190207 -1.689556 1.239496
[1] 8 10 14 10
[1] 9 15 27 15
[1] 3 4 6 4
[1] 20.08554 148.41316 8103.08393 148.41316
# "Skalárny súčin" dvoch vektorov rovnakej dĺžky:
x <- c(1,2,3); y <- c(1,1,1)
sum(x * y) # skutočný skalárny súčin (výsledok skalar)[1] 6
[,1]
[1,] 6
[1] 1 2 3
[1] 6
[1] 4
# POZOR na recyklovanie dĺžok – najlepšie je mať rovnaké dĺžky:
try(c(1,2,3,4) + v1) # ak sú rovnaké, OK[1] 4 8 4 13
[1] 9
[1] 14 2 27
[1] 14 2 27 11 5 0
[1] 14 27 11
[1] 2 4 5
[1] 5.2
[1] 4.969909
[1] 12
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0 1.0 5.0 5.2 8.0 12.0
[1] 0 1 5 8 12
[1] 12 8 5 1 0
[1] FALSE TRUE FALSE TRUE FALSE
[1] TRUE
[1] NA
[1] 3
m <- matrix(2:13, nrow = 3, ncol = 4) # plní sa po stĺpcoch (2..13)
m_byrow <- matrix(20:31, nrow = 3, byrow = TRUE) # plní sa po riadkoch (20..31)
m; m_byrow [,1] [,2] [,3] [,4]
[1,] 2 5 8 11
[2,] 3 6 9 12
[3,] 4 7 10 13
[,1] [,2] [,3] [,4]
[1,] 20 21 22 23
[2,] 24 25 26 27
[3,] 28 29 30 31
[1] 4
[1] 11 12 13
[1] 2 5 8 11
[,1] [,2]
[1,] 3 6
[2,] 4 7
A <- matrix(c(2, -1,
0, 3), nrow = 2, byrow = TRUE)
B <- matrix(c(4, 1,
5, -2), nrow = 2, byrow = TRUE)
A + B # sčítanie [,1] [,2]
[1,] 6 0
[2,] 5 1
[,1] [,2]
[1,] 8 -1
[2,] 0 -6
[,1] [,2]
[1,] 3 4
[2,] 15 -6
[,1] [,2]
[1,] 2 0
[2,] -1 3
[1] 6
[,1] [,2]
[1,] 0.5 0.1666667
[2,] 0.0 0.3333333
Kontrola rozmerov pre maticový súčin: počet stĺpcov vľavo = počet riadkov vpravo. ## Zlučovanie vektorov do matíc
C <- cbind(2:4, c(10, 20, 30)) # po stĺpcoch (2 3 4) a (10 20 30)
D <- rbind(c(7, 8, 9), 1:3) # po riadkoch
C; D [,1] [,2]
[1,] 2 10
[2,] 3 20
[3,] 4 30
[,1] [,2] [,3]
[1,] 7 8 9
[2,] 1 2 3
Zadanie:
Vytvorte vektor 30 náhodných celých čísel z intervalu
10..99. Čísla končiace na 7 nahraďte hodnotou
NA.
Vypočítajte medián po odstránení NA a zistite
indexy prvkov, ktoré boli nahradené.
# 30 náhodných CELÝCH čísel z intervalu 10..99
u <- sample(10:99, size = 30, replace = TRUE)
# ktoré končia na 7?
ends_with_7 <- u %% 10 == 7
# nahradenie týchto prvkov za NA
u_clean <- u
u_clean[ends_with_7] <- NA
# štatistiky
median_no_na <- median(u_clean, na.rm = TRUE)
idx_sevens <- which(ends_with_7)
u; u_clean [1] 47 98 43 78 81 85 72 22 91 34 47 30 88 50 56 99 69 25 15 81 95 95 48
[24] 40 90 59 43 13 22 78
[1] NA 98 43 78 81 85 72 22 91 34 NA 30 88 50 56 99 69 25 15 81 95 95 48
[24] 40 90 59 43 13 22 78
[1] 64
[1] 1 11