knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)
V tejto časti dokumentu si ukážeme ako pracovať so základnými operáciami v programe R. Na konci kapitoly nájdete malé cvičenie.
Skalár je veličina, ktorá je určená jedinou číselnou hodnotou. ## Numerické skaláre
# Priradenie konštanty do premennej
a <- 20
b <- 4.5
# Aritmetické operácie
sum_ab <- a + b # sucet
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 %% 3 # zbytok po delení tromi (tzv modulo)
# Zaokrúhľovanie
round_b <- round(b) # zaokruhlovanie smerom k najblizsiemu celemu cislu
ceil_b <- ceiling(b) # najblizsie vyssie cele cislo
floor_b <- floor(b) # najblizsie nizsie cele cislo
a; b
## [1] 20
## [1] 4.5
sum_ab; diff_ab; prod_ab; quot_ab; power_ab; mod_ab;
## [1] 24.5
## [1] 15.5
## [1] 90
## [1] 4.444444
## [1] 715541.8
## [1] 2
round_b; ceil_b; floor_b
## [1] 4
## [1] 5
## [1] 4
Vypočítajte:
\[\frac{(9-3)^2-9*(7+5)^4}{(8+12)^2}\]
V následujúcej kapitole sa pozrieme na to ako vieme v programe R pracovať s textovými premennými.
first <- "Miriama" # definovanie obsahu textovej premennej first
last <- "Škulcová" # definovanie obsahu text. premennej last
full <- paste(first, last) # spojenie dvoch text. premennych do jednej (s medzerou)
full_nospace <- paste0(first, last) # spojenie bez medzery
csv_line <- paste("dog", "cat", "bird", sep = ",") # spojenie textov s oddelovacom ,
first; last; full; full_nospace; csv_line # bodkočiarka tu nahradzuje odskok na novy riadok
## [1] "Miriama"
## [1] "Škulcová"
## [1] "Miriama Škulcová"
## [1] "MiriamaŠkulcová"
## [1] "dog,cat,bird"
x <- "R is great!"
nchar(x) # počet znakov v retazci "R is great!"
## [1] 11
substr(x, 1, 5) # podreťazec od 1. do 5. znaku
## [1] "R is "
Táto kapitola obsahuje základne informácie pre prácu s logickými hodnotami a premennými.
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
2 < 3
## [1] TRUE
8 >= 8
## [1] TRUE
"apple" == "apple"
## [1] TRUE
"apple" != "pear" # vykricnik je tu v zmysle negacie. Napr.: !=, !>, !<, !TRUE
## [1] TRUE
!TRUE
## [1] FALSE
x <- 8
x > 6 & x < 15 # a sucasne - logicky prienik (sucin)
## [1] TRUE
x < 0 | x > 100 # alebo - logicke zjednotenie (sucet)
## [1] FALSE
# pri zlozitejsich vztahoch pouzivajte zatvorky ()
vals <- c(TRUE, FALSE, TRUE, TRUE) # definicia vektora s logickymi hodnotami
v1 <- c(10, 20, 30, 40)
v2 <- 1:5 # postupnost 1,2,3,4,5
v3 <- seq(from = 0, to = 1, by = 0.5) # postupnost s krokom 0.5
v4 <- rep(5, times = 5) # 5,5,5,5,5 # 5 clenna postupnost trojak
v5 <- runif(5) # generovanie rovnomerne rozdelenych premennych v intervale [0,1]
v6 <- rnorm(5) # generovanie normalne rozdelenych premennych
v1; v2; v3; v4; v5
## [1] 10 20 30 40
## [1] 1 2 3 4 5
## [1] 0.0 0.5 1.0
## [1] 5 5 5 5 5
## [1] 0.8023270 0.2750443 0.4109054 0.2542386 0.5412631
v <- c(1, 2, 3, 4)
v + 8 # kazdy prvok vektora zvacsime o 8
## [1] 9 10 11 12
v * 4 # kazdy prvok vektora prenasobime 4
## [1] 4 8 12 16
(v + 1) / 2
## [1] 1.0 1.5 2.0 2.5
exp(v) # exponencialna funkcia z kazdeho prvku vektora
## [1] 2.718282 7.389056 20.085537 54.598150
sum(c(1,2,3),c(1,1,1)) # skalarny sucin - vysledok je skalar
## [1] 9
crossprod(c(1,2,3),c(1,1,1)) # skalarny sucin - vysledok je matica 1x1
## [,1]
## [1,] 6
c(1,2,3)*c(1,1,1) # Hadamardov sucin (sucin zodpovedajucich prvkov vektora)
## [1] 1 2 3
length(c(1,2,3,4,5))
## [1] 5
length(v5) #vektor v5 je definovany vyssie
## [1] 5
c(1,2,3,4,5) + v5 # pozor, oba vektory musia mat rovnaky rozmer
## [1] 1.802327 2.275044 3.410905 4.254239 5.541263
x <- c(5, 12, 3, 18, 7, 0, 21)
x[1] # indexovanie - novy jedno-prvkovy vektor - prvy prvok vektora x
## [1] 5
x[2:4] # novy vektor s druhym az stvrtym prvkom vektora x
## [1] 12 3 18
x[-1] # novy vektor - vsetky prvky vektora x okrem prvého
## [1] 12 3 18 7 0 21
x[x > 10] # novy vektor definovany prvkami x vacsimi ako 10
## [1] 12 18 21
which(x > 10) # ktore prvky zodpovedaju podmienke vacsieho ako 10?
## [1] 2 4 7
y <- c(1, NA, 3, NA, 5)
is.na(y)
## [1] FALSE TRUE FALSE TRUE FALSE
mean(y) # NA
## [1] NA
mean(y, na.rm = TRUE) # remove NAs
## [1] 3
z <- c(10, 3, 5, 8, 2)
mean(z) # priemerna hodnota
## [1] 5.6
sd(z) # standardna odchylka
## [1] 3.361547
max(z) # maximalna hodnota
## [1] 10
summary(z) # rychly prehlad zakladnych statistik o vektore
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.0 3.0 5.0 5.6 8.0 10.0
sort(z) # rastuce usporiadanie
## [1] 2 3 5 8 10
sort(z, decreasing = TRUE) # klesajuce
## [1] 10 8 5 3 2
Vytvorte vektor
b
ktorý bude obsahovať čísla od 4 po 15 a vypočítajte rozdiel všetkých párnych čísel, ktoré obsahuje.
b <- 4:15
diff(b[b %% 2 == 0])
## [1] 2 2 2 2 2
m <- matrix(1:12, nrow = 3, ncol = 4) # hodnoty sú zadavane po stlpcoch
m_byrow <- matrix(1:12, nrow = 3, byrow = TRUE) # hodnoty su zadavane po riadkoch
m; m_byrow
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
dim(m) # (rows, cols)
## [1] 3 4
m
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
m[1, 2] # riadok 1, stlpec 2
## [1] 4
m[ , 3] # vsetky prvky v tretom stlpci - vysledok matica 3x1
## [1] 7 8 9
m[2, ] # vsetky prvky v druhom riadku - vysledok matica 1*3
## [1] 2 5 8 11
m[1:2, 2:3] # podmatica tvorena riadkami 1, 2 a stlpcami 2, 3
## [,1] [,2]
## [1,] 4 7
## [2,] 5 8
A <- matrix(c(1,2,3,4), nrow = 2)
B <- matrix(c(5,6,7,8), nrow = 2)
A + B # scitanie matic
## [,1] [,2]
## [1,] 6 10
## [2,] 8 12
A * B # Hadamard product - nasobenie po zodpovedajucich prvkoch
## [,1] [,2]
## [1,] 5 21
## [2,] 12 32
A %*% B # nasobenie matic
## [,1] [,2]
## [1,] 23 31
## [2,] 34 46
t(A) # transpozicia matice A - vymena riadkov a stlpcov
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
det(A) # determinant matice
## [1] -2
solve(A) # inverzia matice (ak je matica regularna - teda inverzia sa da spocitat)
## [,1] [,2]
## [1,] -2 1.5
## [2,] 1 -0.5
C <- cbind(1:3, 4:6) # - po stlpcoch
D <- rbind(1:3, 4:6) # - po riadkoch
C; D
## [,1] [,2]
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
M <- matrix(1:9, nrow = 3)
M
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
apply(M, 1, sum) # suma po riadkoch
## [1] 12 15 18
apply(M, 2, mean) # priemery po stĺpcoch
## [1] 2 5 8
Vytvorte maticu 4x4 s hodnotami po riadkoch 1..16, vypočítajte stĺpcové sumy a priemer po stĺpcoch.
M2 <- matrix(1:16, nrow = 4, byrow = TRUE)
colSums(M2)
## [1] 28 32 36 40
apply(M2, 2, mean)
## [1] 7 8 9 10
#Môj návrh použitia novinky
mat_list <- replicate(10, matrix(runif(25,-10,10), nrow=5), simplify = FALSE) #Vygeneruje zoznam 10 náhodných matíc 5x5