V tejto úlohe sa zameriame na vypracovanie úloh s numerickými, textovými a logickými premennými a vektormi.
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
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."
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
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
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.
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
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
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
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
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
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