V tejto úlohe sa zameriame na vypracovanie úloh s numerickými, textovými a logickými premennými a vektormi.

Malé cvičenie

Numerické úlohy

Vypočítajte:

\[|(2+17-24)|\]

abs(2+17-24)
## [1] 5

\[\frac{(2^2+3^3+4^4)^2}{5^5}\]

((2**2+3**3+4**4)**2) / 5**5
## [1] 26.35808

pre \(r=4\) \[\pi*r^2\]

r <- 4
pi*r**2
## [1] 50.26548

Textové úlohy

Vytváranie viet pomocou reťazcov

slovo1 <- 'Adam'
slovo2 <- 'zjedol'
slovo3 <- 'jablko'
znak1 <- '.'
znak2 <- '?'

veta1 <- paste(slovo1, slovo2, slovo3)
veta1 <- paste0(veta1, znak1)

veta2 <- paste(slovo2, slovo1, slovo3)
veta2 <- paste0(veta2, znak2)

veta1
## [1] "Adam zjedol jablko."
veta2
## [1] "zjedol Adam jablko?"

Počet znakov v reťazci

print(paste0('Počet znakov vo vete je ', nchar(veta1),'.'))
## [1] "Počet znakov vo vete je 19."

Logické úlohy

Jednoduché

4 < 5
## [1] TRUE
5 < 4
## [1] FALSE
5 <= 5 
## [1] TRUE
veta1 == veta2
## [1] FALSE
slovo1 == 'Adam'
## [1] TRUE

Zložetejšie

a <- 3
b <- 4
c <- 5

a+b == b+a
## [1] TRUE
a+b != a+c
## [1] TRUE
a+b == b+a & a+b != a+c
## [1] TRUE
a+b == b+a | a+b != a+c
## [1] TRUE

Vektorové operácie

Vytváranie rovnakého vektora párnych čísel

v <- seq(-10,10)
u <- c(TRUE, FALSE)
v[u]
##  [1] -10  -8  -6  -4  -2   0   2   4   6   8  10
t <- seq(-10,10,2)
t
##  [1] -10  -8  -6  -4  -2   0   2   4   6   8  10
w <- seq(-10,10)
w[seq(1,21,2)]
##  [1] -10  -8  -6  -4  -2   0   2   4   6   8  10
w[w%%2 != 1]
##  [1] -10  -8  -6  -4  -2   0   2   4   6   8  10
w[w%%2 == 0]
##  [1] -10  -8  -6  -4  -2   0   2   4   6   8  10

Operácie s rovnakým výsledkom

t**2
##  [1] 100  64  36  16   4   0   4  16  36  64 100
t*t
##  [1] 100  64  36  16   4   0   4  16  36  64 100

Skalárny súčin

t%*%t
##      [,1]
## [1,]  440
(t*t)%*%(t*t)
##       [,1]
## [1,] 31328

Ďalšie vektorové funckie

length(t)
## [1] 11
length(t%*%t)
## [1] 1
t[t>0]
## [1]  2  4  6  8 10
mean(t)
## [1] 0
max(t)
## [1] 10
min(t)
## [1] -10
sort(t, decreasing = TRUE)
##  [1]  10   8   6   4   2   0  -2  -4  -6  -8 -10
sum(t)
## [1] 0
sum(t[t>0])
## [1] 30

Môj návrh použitia novinky

V celej úlohe som sa snažila vymýšľať kreatívne spôsoby, akými pracovať s príkazmi z hodiny. Ak sa ale zameriame na nejaké praktické využitie, vieme si pomocou nám známych príkazov (a nového strsplit) vytvoriť kód na prácu s generovaním hesla. Pomocou zisťovania dĺžky reťazca vieme zistiť, či nami vymyslené heslo spĺňa základnú požiadavku (napr. 8 až 20 znakov), a ďalej, či sa v hesle nachádza medzera (veľakrát nepodporovaný znak):

heslo <- 'MojeHeslo 123'
dlzka<- nchar(heslo)
heslo1 <- strsplit(heslo,'')[[1]]
heslo1 <- heslo1[heslo1!=' ']
dlzka == length(heslo1)
## [1] FALSE

Ak sme dostali FALSE, vieme, že v hesle sa nachádza medzera.

heslo <- 'MojeHeslo_123'
dlzka<- nchar(heslo)
heslo1 <- strsplit(heslo,'')[[1]]
heslo1 <- heslo1[heslo1!=' ']
dlzka == length(heslo1)
## [1] TRUE
8 <= length(heslo1) & length(heslo1) <= 20
## [1] TRUE

Ak boli obe odpovede TRUE, heslo spĺňa naše podmienky.

Matice

Vytvorenie matíc

m <- matrix(1:15, 3, 5)            # hodnoty sú zadavane po stlpcoch
m_byrow <- matrix(1:12, 3, 5, TRUE)  # hodnoty su zadavane po riadkoch
## Warning in matrix(1:12, 3, 5, TRUE): data length [12] is not a sub-multiple or
## multiple of the number of columns [5]
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    1    2    3

Rozmery matíc

dim(m)                   # (rows, cols)
## [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[2, 4]      # riadok 2, stlpec 4
## [1] 11
m[ , 2]      # vsetky prvky v druhom stlpci - vysledok matica 3x1
## [1] 4 5 6
m[3, ]       # vsetky prvky v tretom riadku - vysledok matica 1*3
## [1]  3  6  9 12 15
m[2:3, 2:4]  # podmatica tvorena riadkami 2, 3 a stlpcami 2, 3, 4
##      [,1] [,2] [,3]
## [1,]    5    8   11
## [2,]    6    9   12

Maticové operácie

A <- matrix(c(1,2,3,5),2,2)
B <- matrix(c(4,5,6,8),2,2)

A + B        # scitanie matic
##      [,1] [,2]
## [1,]    5    9
## [2,]    7   13
A * B        # Hadamard product - nasobenie po zodpovedajucich prvkoch
##      [,1] [,2]
## [1,]    4   18
## [2,]   10   40
A %*% B      # nasobenie matic
##      [,1] [,2]
## [1,]   19   30
## [2,]   33   52
t(A)         # transpozicia matice A - vymena riadkov a stlpcov
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    5
det(A)       # determinant matice
## [1] -1
solve(A)     # inverzia matice (ak je matica regularna - teda inverzia sa da spocitat)
##      [,1] [,2]
## [1,]   -5    3
## [2,]    2   -1
C <- cbind(c(3,6,9), 4:2)   #  - po stlpcoch 
D <- rbind(c(2,4,6), 3:1)   #  - po riadkoch 
C; D
##      [,1] [,2]
## [1,]    3    4
## [2,]    6    3
## [3,]    9    2
##      [,1] [,2] [,3]
## [1,]    2    4    6
## [2,]    3    2    1

Vypočítanie zvolenej štatistiky po riadkoch (stĺpcoch) matice

M <- matrix(1:12,3,4,TRUE)
M
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
apply(M, 1, sum)   # suma po riadkoch
## [1] 10 26 42
apply(M, 2, mean)  # priemery po stĺpcoch
## [1] 5 6 7 8
apply(M, 2, sum)   # suma po stlpcoch
## [1] 15 18 21 24
apply(M, 1, mean)  # priemery po riadkoch
## [1]  2.5  6.5 10.5

Malé cvičenie

Matice môžeme použiť pre výpočet systémov rovníc, Napríklad: \[4x+5y=23\] \[5x+4y=22\]

solve(matrix(c(4,5,5,4),2,2),c(23,22))
## [1] 2 3