knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)
Skaláre (jednočíselné hodnoty) Numerické skaláre
# Priradenie konštanty do premennej
a <- 5
b <- 2.3
# Aritmetické operácie
sum_ab <- a + b # súčet
diff_ab <- a - b # rozdiel
prod_ab <- a * b # násobenie
quot_ab <- a / b # delenie
power_ab <- a ^ b # umocňovanie
mod_ab <- a %% 4 # zbytok po delení štyrmi (modulo)
# Zaokrúhľovanie
round_b <- round(b) # zaokrúhlovanie 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
a; b
[1] 5
[1] 2.3
sum_ab; diff_ab; prod_ab; quot_ab; power_ab; mod_ab; round_b; ceil_b; floor_b
[1] 7.3
[1] 2.7
[1] 11.5
[1] 2.173913
[1] 40.51641
[1] 1
[1] 2
[1] 3
[1] 2
Vypočítajte:
(12^2 - 3) / 5
[1] 28.2
Vytváranie textových premenných a práca s nimi
first <- "Natalia" # definovanie obsahu textovej premennej first
last <- "Nadaska" # definovanie obsahu textovej premennej last
full <- paste(first, last) # spojenie dvoch textových premenných do jednej (s medzerou)
full_nospace <- paste0(first, last) # spojenie bez medzery
csv_line <- paste("orange", "grape", "peach", sep = ",") # spojenie textov s oddelovačom ,
first; last; full; full_nospace; csv_line # bodkočiarka nahrádza odskok na nový riadok
[1] "Natalia"
[1] "Nadaska"
[1] "Natalia Nadaska"
[1] "NataliaNadaska"
[1] "orange,grape,peach"
Dĺžka textového reťazca, podreťazec
x <- "Learning R!"
nchar(x) # počet znakov v reťazci "Learning R!"
[1] 11
substr(x, 1, 5) # podreťazec od 1. do 5. znaku
[1] "Learn"
Základy
p <- TRUE
q <- FALSE
!p # NOT
[1] FALSE
p & q # AND
[1] FALSE
p | q # OR
[1] TRUE
xor(p, q) # exclusive OR - platí len jedno z p, alebo q
[1] TRUE
Logický výsledok porovnávania
4 < 6
[1] TRUE
8 >= 8
[1] TRUE
"dog" == "dog"
[1] TRUE
"dog" != "cat" # vykričník je tu v zmysle negácie. Napr.: !=, !>, !<, !TRUE
[1] TRUE
!TRUE
[1] FALSE
Zložitejšie logické operácie
x <- 15
x > 5 & x < 25 # a súčasne - logický prienik (priesečník)
[1] TRUE
x < 0 | x > 50 # alebo - logické zjednotenie (zjednotenie)
[1] FALSE
# pri zložitejších vzťahoch používajte zatvorky ()
Zlučovanie viacerých logických premenných do vektora
vals <- c(FALSE, TRUE, FALSE, TRUE) # definícia vektora s logickými hodnotami
Numerické vektory Generovanie vektorov
v1 <- c(3, 6, 9, 12)
v2 <- 1:8 # postupnosť 1, 2, 3, 4, 5, 6, 7, 8
v3 <- seq(from = 0, to = 2, by = 0.5) # postupnosť s krokom 0.5
v4 <- rep(5, times = 6) # 5, 5, 5, 5, 5, 5 # 6-členná postupnosť piatich
v5 <- runif(6) # generovanie rovnomerne rozdelených čísel v intervale [0,1]
v6 <- rnorm(6) # generovanie normálne rozdelených čísel
v1; v2; v3; v4; v5
[1] 3 6 9 12
[1] 1 2 3 4 5 6 7 8
[1] 0.0 0.5 1.0 1.5 2.0
[1] 5 5 5 5 5 5
[1] 0.8252619 0.8828875 0.2083422 0.1733242 0.9607667 0.8082044
Aritmetické operácie s vektormi
v <- c(2, 3, 4, 5)
v + 15 # každý prvok vektora zväčšíme o 15
[1] 17 18 19 20
v * 3 # každý prvok vektora vynásobíme 3
[1] 6 9 12 15
(v + 5) / 4
[1] 1.75 2.00 2.25 2.50
exp(v) # exponenciálna funkcia z každého prvku vektora
[1] 7.389056 20.085537 54.598150 148.413159
sum(c(2,3,4),c(2,2,2)) # skalárny súčin - výsledok je skalar
[1] 15
crossprod(c(2,3,4),c(2,2,2)) # skalárny súčin - výsledok je matica 1x1
[,1]
[1,] 18
c(2,3,4)*c(2,2,2) # Hadamardov súčin (súčin zodpovedajúcich prvkov vektora)
[1] 4 6 8
Matematické operácie s 2 vektormi rovnakého rozmeru
length(c(2,3,4,5,6))
[1] 5
length(v5) # vektor v5 je definovaný vyššie
[1] 6
c(2,3,4,5,6) + v5 # pozor, oba vektory musia mať rovnaký rozmer
[1] 2.825262 3.882888 4.208342 5.173324 6.960767 2.808204
Indexovanie a výber niektorých prvkov vektora
x <- c(7, 14, 5, 21, 9, 0, 28)
x[1] # indexovanie - nový jedno-prvkový vektor - prvý prvok vektora x
[1] 7
x[2:5] # nový vektor s druhým až piatym prvkom vektora x
[1] 14 5 21 9
x[-1] # nový vektor - všetky prvky vektora x okrem prvého
[1] 14 5 21 9 0 28
x[x > 10] # nový vektor definovaný prvkami x väčšími ako 10
[1] 14 21 28
which(x > 10) # ktoré prvky zodpovedajú podmienke väčšieho ako 10?
[1] 2 4 7
Práca s chýbajúcimi hodnotami
y <- c(2, NA, 6, NA, 10)
is.na(y)
[1] FALSE TRUE FALSE TRUE FALSE
mean(y) # NA
[1] NA
mean(y, na.rm = TRUE) # remove NAs
[1] 6
Základné štatistiky a usporiadanie prvkov vektora podľa veľkosti
z <- c(15, 7, 9, 11, 4)
mean(z) # priemerná hodnota
[1] 9.2
sd(z) # štandardná odchýlka
[1] 4.147288
max(z) # maximálna hodnota
[1] 15
summary(z) # rýchly prehľad základných štatistík o vektore
Min. 1st Qu. Median Mean 3rd Qu. Max.
4.0 7.0 9.0 9.2 11.0 15.0
sort(z) # rastúce usporiadanie
[1] 4 7 9 11 15
sort(z, decreasing = TRUE) # klesajúce
[1] 15 11 9 7 4
cvičenie
Vytvorte vektor w s číslami 2..22 a vypočítajte sumu všetkých párnych čísel.
w <- 2:22
sum(w[w %% 2 == 0])
[1] 132
Vytvorenie matíc
m <- matrix(1:15, nrow = 3, ncol = 5) # hodnoty sú zadávané po stĺpcoch
m_byrow <- matrix(1:15, nrow = 3, byrow = TRUE) # hodnoty sú zadávané po riadkoch
m; m_byrow
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
Rozmery matice
dim(m) # (riadky, stĺpce)
[1] 3 5
m
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
Adresovanie prvkov matice
m[1, 2] # riadok 1, stĺpec 2
[1] 4
m[ , 3] # všetky prvky v treťom stĺpci - výsledok matica 3x1
[1] 7 8 9
m[2, ] # všetky prvky v druhom riadku - výsledok matica 1x3
[1] 2 5 8 11 14
m[1:2, 2:3] # podmatica tvorena riadkami 1, 2 a stĺpcami 2, 3
[,1] [,2]
[1,] 4 7
[2,] 5 8
Maticové operácie
A <- matrix(c(2,4,6,8), nrow = 2)
B <- matrix(c(3,6,9,12), nrow = 2)
A + B # sčítanie matic
[,1] [,2]
[1,] 5 15
[2,] 10 20
A * B # Hadamard product - násobenie po zodpovedajúcich prvkoch
[,1] [,2]
[1,] 6 54
[2,] 24 96
A %*% B # násobenie matic
[,1] [,2]
[1,] 42 90
[2,] 60 132
t(A) # transpozícia matice A - výmena riadkov a stĺpcov
[,1] [,2]
[1,] 2 4
[2,] 6 8
det(A) # determinant matice
[1] -8
solve(A) # inverzia matice (ak je matica regulárna - teda inverzia sa dá vypočítať)
[,1] [,2]
[1,] -1.0 0.75
[2,] 0.5 -0.25
Zlučovanie vektorov do matíc
C <- cbind(2:4, 5:7) # - po stĺpcoch
D <- rbind(3:5, 6:8) # - po riadkoch
C; D
[,1] [,2]
[1,] 2 5
[2,] 3 6
[3,] 4 7
[,1] [,2] [,3]
[1,] 3 4 5
[2,] 6 7 8
Vypočítanie zvolenej štatistiky po riadkoch (stĺpcoch) matice
M <- matrix(1:12, nrow = 3)
M
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
apply(M, 1, sum) # suma po riadkoch
[1] 22 26 30
apply(M, 2, mean) # priemery po stĺpcoch
[1] 2 5 8 11
cvičenie
Vytvorte maticu 4x4 s hodnotami po riadkoch 1..16, vypočítajte stĺpcové sumy a súčin matíc MtM
M2 <- matrix(1:16, nrow = 4, byrow = TRUE)
colSums(M2)
[1] 28 32 36 40
t(M2) %*% M2
[,1] [,2] [,3] [,4]
[1,] 276 304 332 360
[2,] 304 336 368 400
[3,] 332 368 404 440
[4,] 360 400 440 480