knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE
)

1. Čísla

# Priradenie konštanty do premennej
a <- 15
b <- 10
a
[1] 15
b
[1] 10
# Arithmetic
sum_ab      <- a + b        # sucet
sum_ab
[1] 25
diff_ab     <- a - b        # rozdiel
diff_ab
[1] 5
prod_ab     <- a * b        # násobenie
prod_ab
[1] 150
quot_ab     <- a / b        # delenie
quot_ab
[1] 1.5
power_ab    <- a ^ b        # umocňovanie
power_ab
[1] 576650390625
mod_ab      <- b %% 4       # zbytok po delení tromi (tzv modulo)
mod_ab
[1] 2

Malé cvičenie

Vypočítajte:

\[\frac{(18^2-9)}{4}\]

(18^2 - 9) / 4
[1] 78.75

2. Text

first <- "Igor"                       # definovanie obsahu textovej premennej first
last  <- "Németh"                          # 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("jahoda", "jablko", "orech", sep = ",")  # spojenie textov s oddelovacom ,
first; last; full; full_nospace; csv_line   # bodkočiarka tu nahradzuje odskok na novy riadok 
[1] "Igor"
[1] "Németh"
[1] "Igor Németh"
[1] "IgorNémeth"
[1] "jahoda,jablko,orech"
x <- "Tenis je najlepší šport"
nchar(x) # počet znakov  v retazci "Tenis je najlepší šport"
[1] 23
x
[1] "Tenis je najlepší šport"
substr(x, 1, 13)          # podreťazec od 1. do 23. znaku
[1] "Tenis je najl"

3. Logické hodnoty

p <- TRUE
q <- FALSE
!p                 # NOT
[1] FALSE
p & q              # AND
[1] FALSE
p | q              # OR
[1] TRUE
xor(p, q)          # exclusive OR 
[1] TRUE
!p; !q; p & q; p | q; xor(p, q)
[1] FALSE
[1] TRUE
[1] FALSE
[1] TRUE
[1] TRUE

4. Novinka

Moja funkcia slúži na vytvorenie náhodného hesla

random_password <- function(length = 8) {
  chars <- c(letters, LETTERS, 0:9)
  paste(sample(chars, length, replace = TRUE), collapse = "")}

random_password()
[1] "Qq1gMnVP"
random_password(17)
[1] "YMo9uQ8rh75f72Heb"

Numerické vektory

Generovanie vektorov

v1 <- c(3, 5, 7, 9)
v2 <- 1:7                  
v3 <- seq(from = 0, to = 3, by = 0.75)  
v4 <- rep(7, times = 3)    
v5 <- runif(6)             
v6 <- rnorm(6)             
v1; v2; v3; v4; v5; v6
[1] 3 5 7 9
[1] 1 2 3 4 5 6 7
[1] 0.00 0.75 1.50 2.25 3.00
[1] 7 7 7
[1] 0.3233644 0.5174744 0.2200254 0.6013817 0.4882949 0.3301193
[1]  2.3771993  0.1732159 -2.7503249  0.8917910 -0.2565110 -0.2768242

Aritmetické operácie s vektormi

v <- c(2, 3, 4, 5)
v + 8           
[1] 10 11 12 13
v * 3            
[1]  6  9 12 15
(v + 3) / 2
[1] 2.5 3.0 3.5 4.0
exp(v)           
[1]   7.389056  20.085537  54.598150 148.413159
sum(c(3,5,7),c(1,1,1))          
[1] 18
crossprod(c(3,5,7),c(1,1,1))    
     [,1]
[1,]   15
c(3,5,7)*c(1,1,1)               
[1] 3 5 7

Matematické operácie s 2 vektormi rovnakého rozmeru

length(c(3,5,7,9,11))
[1] 5
length(v5)            
[1] 6
c(3,5,7,9,11) + v5    
[1]  3.323364  5.517474  7.220025  9.601382 11.488295  3.330119

Indexovanie a výber niektorych prvkov vektora

x <- c(5, 12, 3, 18, 7, 0, 21)
x[3]           
[1] 3
x[1:3]         
[1]  5 12  3
x[-4]         
[1]  5 12  3  7  0 21
x[x > 6]      
[1] 12 18  7 21
which(x > 10)  
[1] 2 4 7

Práca s chýbajúcimi hodnotami

y <- c(3, NA, 5, NA, 7)
is.na(y)
[1] FALSE  TRUE FALSE  TRUE FALSE
mean(y)                 
[1] NA
mean(y, na.rm = TRUE)   
[1] 5

Základné štatistiky a usporiadanie prvkov vektora podľa veľkosti

z <- c(12, 1, 6, 8, 10)
mean(z)                 
[1] 7.4
sd(z)                  
[1] 4.219005
max(z)                  
[1] 12
summary(z)              
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    1.0     6.0     8.0     7.4    10.0    12.0 
sort(z)                 
[1]  1  6  8 10 12
sort(z, decreasing = TRUE)  
[1] 12 10  8  6  1

Malé cvičenie

w <- 5:36
sum(w[w %% 5 == 0])
[1] 140

Matice

Vytvorenie matíc

m <- matrix(1:12, nrow = 3, ncol = 4)            
m_byrow <- matrix(1:12, nrow = 3, byrow = TRUE)  
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

Rozmery matice

dim(m)                   
[1] 3 4
m
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

Adresovanie prvkov matice

m[1, 2]      
[1] 4
m[ , 3]      
[1] 7 8 9
m[2, ]       
[1]  2  5  8 11
m[1:2, 2:3]  
     [,1] [,2]
[1,]    4    7
[2,]    5    8

Maticové operácie

A <- matrix(c(3,7,8,9), nrow = 2)
B <- matrix(c(5,6,7,8), nrow = 2)

A + B        # scitanie matic
     [,1] [,2]
[1,]    8   15
[2,]   13   17
A * B        # Hadamard product - nasobenie po zodpovedajucich prvkoch
     [,1] [,2]
[1,]   15   56
[2,]   42   72
A %*% B      # nasobenie matic
     [,1] [,2]
[1,]   63   85
[2,]   89  121
t(A)         # transpozicia matice A - vymena riadkov a stlpcov
     [,1] [,2]
[1,]    3    7
[2,]    8    9
det(A)       # determinant matice
[1] -29
solve(A)     # inverzia matice (ak je matica regularna - teda inverzia sa da spocitat)
           [,1]       [,2]
[1,] -0.3103448  0.2758621
[2,]  0.2413793 -0.1034483

Zlučovanie vektorov do matíc

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

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

Malé cvičenie

M2 <- matrix(1:36, nrow = 6, byrow = TRUE)
colSums(M2)
[1]  96 102 108 114 120 126
t(M2) %*% M2
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 2166 2262 2358 2454 2550 2646
[2,] 2262 2364 2466 2568 2670 2772
[3,] 2358 2466 2574 2682 2790 2898
[4,] 2454 2568 2682 2796 2910 3024
[5,] 2550 2670 2790 2910 3030 3150
[6,] 2646 2772 2898 3024 3150 3276

LS0tCnRpdGxlOiAiWsOha2xhZG7DqSBvcGVyw6FjaWUgdiBSIgphdXRob3I6ICJJZ29yIE7DqW1ldGgiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0aGVtZTogdW5pdGVkCiAgICBoaWdobGlnaHQ6IHRhbmdvCmVkaXRvcl9vcHRpb25zOiAKICBtYXJrZG93bjogCiAgICB3cmFwOiA3MgotLS0KYGBge3Igc2V0dXAsIGluY2x1ZGU9VFJVRSxlY2hvPVRSVUV9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlY2hvID0gVFJVRSwKICBtZXNzYWdlID0gRkFMU0UsCiAgd2FybmluZyA9IEZBTFNFCikKYGBgCiMgMS4gxIzDrXNsYQpgYGB7cn0KIyBQcmlyYWRlbmllIGtvbsWhdGFudHkgZG8gcHJlbWVubmVqCmEgPC0gMTUKYiA8LSAxMAphCmIKCiMgQXJpdGhtZXRpYwpzdW1fYWIgICAgICA8LSBhICsgYiAgICAgICAgIyBzdWNldApzdW1fYWIKZGlmZl9hYiAgICAgPC0gYSAtIGIgICAgICAgICMgcm96ZGllbApkaWZmX2FiCnByb2RfYWIgICAgIDwtIGEgKiBiICAgICAgICAjIG7DoXNvYmVuaWUKcHJvZF9hYgpxdW90X2FiICAgICA8LSBhIC8gYiAgICAgICAgIyBkZWxlbmllCnF1b3RfYWIKcG93ZXJfYWIgICAgPC0gYSBeIGIgICAgICAgICMgdW1vY8WIb3ZhbmllCnBvd2VyX2FiCm1vZF9hYiAgICAgIDwtIGIgJSUgNCAgICAgICAjIHpieXRvayBwbyBkZWxlbsOtIHRyb21pICh0enYgbW9kdWxvKQptb2RfYWIKYGBgCgoKIyMjIE1hbMOpIGN2acSNZW5pZQoKPiBWeXBvxI3DrXRhanRlOgoKJCRcZnJhY3soMTheMi05KX17NH0kJAoKYGBge3J9CigxOF4yIC0gOSkgLyA0CmBgYAoKLS0tCgojIDIuIFRleHQgCgpgYGB7cn0KZmlyc3QgPC0gIklnb3IiICAgICAgICAgICAgICAgICAgICAgICAjIGRlZmlub3ZhbmllIG9ic2FodSB0ZXh0b3ZlaiBwcmVtZW5uZWogZmlyc3QKbGFzdCAgPC0gIk7DqW1ldGgiICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlZmlub3ZhbmllIG9ic2FodSB0ZXh0LiBwcmVtZW5uZWogbGFzdApmdWxsICA8LSBwYXN0ZShmaXJzdCwgbGFzdCkgICAgICAgICAgICAgICAjIHNwb2plbmllIGR2b2NoIHRleHQuIHByZW1lbm55Y2ggZG8gamVkbmVqIChzIG1lZHplcm91KQpmdWxsX25vc3BhY2UgPC0gcGFzdGUwKGZpcnN0LCBsYXN0KSAgICAgICAjIHNwb2plbmllIGJleiBtZWR6ZXJ5CmNzdl9saW5lIDwtIHBhc3RlKCJqYWhvZGEiLCAiamFibGtvIiwgIm9yZWNoIiwgc2VwID0gIiwiKSAgIyBzcG9qZW5pZSB0ZXh0b3YgcyBvZGRlbG92YWNvbSAsCmZpcnN0OyBsYXN0OyBmdWxsOyBmdWxsX25vc3BhY2U7IGNzdl9saW5lICAgIyBib2Rrb8SNaWFya2EgdHUgbmFocmFkenVqZSBvZHNrb2sgbmEgbm92eSByaWFkb2sgCnggPC0gIlRlbmlzIGplIG5hamxlcMWhw60gxaFwb3J0IgpuY2hhcih4KSAjIHBvxI1ldCB6bmFrb3YgIHYgcmV0YXpjaSAiVGVuaXMgamUgbmFqbGVwxaHDrSDFoXBvcnQiCngKc3Vic3RyKHgsIDEsIDEzKSAgICAgICAgICAjIHBvZHJlxaVhemVjIG9kIDEuIGRvIDEzLiB6bmFrdQpgYGAKCi0tLQoKIyAzLiBMb2dpY2vDqSBob2Rub3R5CgpgYGB7cn0KcCA8LSBUUlVFCnEgPC0gRkFMU0UKIXAgICAgICAgICAgICAgICAgICMgTk9UCnAgJiBxICAgICAgICAgICAgICAjIEFORApwIHwgcSAgICAgICAgICAgICAgIyBPUgp4b3IocCwgcSkgICAgICAgICAgIyBleGNsdXNpdmUgT1IgCiFwOyAhcTsgcCAmIHE7IHAgfCBxOyB4b3IocCwgcSkKYGBgCgojIDQuIE5vdmlua2EKTW9qYSBmdW5rY2lhIHNsw7rFvmkgbmEgdnl0dm9yZW5pZSBuw6Fob2Ruw6lobyBoZXNsYQpgYGB7cn0KcmFuZG9tX3Bhc3N3b3JkIDwtIGZ1bmN0aW9uKGxlbmd0aCA9IDgpIHsKICBjaGFycyA8LSBjKGxldHRlcnMsIExFVFRFUlMsIDA6OSkKICBwYXN0ZShzYW1wbGUoY2hhcnMsIGxlbmd0aCwgcmVwbGFjZSA9IFRSVUUpLCBjb2xsYXBzZSA9ICIiKX0KCnJhbmRvbV9wYXNzd29yZCgpCnJhbmRvbV9wYXNzd29yZCgxNykKYGBgCgojIE51bWVyaWNrw6kgdmVrdG9yeQoKIyMgR2VuZXJvdmFuaWUgdmVrdG9yb3YKCmBgYHtyfQp2MSA8LSBjKDMsIDUsIDcsIDkpCnYyIDwtIDE6NyAgICAgICAgICAgICAgICAgIAp2MyA8LSBzZXEoZnJvbSA9IDAsIHRvID0gMywgYnkgPSAwLjc1KSAgCnY0IDwtIHJlcCg3LCB0aW1lcyA9IDMpICAgIAp2NSA8LSBydW5pZig2KSAgICAgICAgICAgICAKdjYgPC0gcm5vcm0oNikgICAgICAgICAgICAgCnYxOyB2MjsgdjM7IHY0OyB2NTsgdjYKYGBgCgojIyBBcml0bWV0aWNrw6kgb3BlcsOhY2llIHMgdmVrdG9ybWkKCmBgYHtyfQp2IDwtIGMoMiwgMywgNCwgNSkKdiArIDggICAgICAgICAgIAp2ICogMyAgICAgICAgICAgIAoodiArIDMpIC8gMgpleHAodikgICAgICAgICAgIApzdW0oYygzLDUsNyksYygxLDEsMSkpICAgICAgICAgIApjcm9zc3Byb2QoYygzLDUsNyksYygxLDEsMSkpICAgIApjKDMsNSw3KSpjKDEsMSwxKSAgICAgICAgICAgICAgIApgYGAKCiMjIE1hdGVtYXRpY2vDqSBvcGVyw6FjaWUgcyAyIHZla3Rvcm1pIHJvdm5ha8OpaG8gcm96bWVydQoKYGBge3J9Cmxlbmd0aChjKDMsNSw3LDksMTEpKQpsZW5ndGgodjUpICAgICAgICAgICAgCmMoMyw1LDcsOSwxMSkgKyB2NSAgICAKYGBgCgojIyBJbmRleG92YW5pZSBhIHbDvWJlciBuaWVrdG9yeWNoIHBydmtvdiB2ZWt0b3JhCgpgYGB7cn0KeCA8LSBjKDUsIDEyLCAzLCAxOCwgNywgMCwgMjEpCnhbM10gICAgICAgICAgIAp4WzE6M10gICAgICAgICAKeFstNF0gICAgICAgICAKeFt4ID4gNl0gICAgICAKd2hpY2goeCA+IDEwKSAgCmBgYAoKIyMgUHLDoWNhIHMgY2jDvWJhasO6Y2ltaSBob2Rub3RhbWkKCmBgYHtyfQp5IDwtIGMoMywgTkEsIDUsIE5BLCA3KQppcy5uYSh5KQptZWFuKHkpICAgICAgICAgICAgICAgICAKbWVhbih5LCBuYS5ybSA9IFRSVUUpICAgCmBgYAoKIyMgWsOha2xhZG7DqSDFoXRhdGlzdGlreSBhIHVzcG9yaWFkYW5pZSBwcnZrb3YgdmVrdG9yYSBwb2TEvmEgdmXEvmtvc3RpCgpgYGB7cn0KeiA8LSBjKDEyLCAxLCA2LCA4LCAxMCkKbWVhbih6KSAgICAgICAgICAgICAgICAgCnNkKHopICAgICAgICAgICAgICAgICAgCm1heCh6KSAgICAgICAgICAgICAgICAgIApzdW1tYXJ5KHopICAgICAgICAgICAgICAKc29ydCh6KSAgICAgICAgICAgICAgICAgCnNvcnQoeiwgZGVjcmVhc2luZyA9IFRSVUUpICAKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUKCmBgYHtyfQp3IDwtIDU6MzYKc3VtKHdbdyAlJSA1ID09IDBdKQpgYGAKCi0tLQoKIyBNYXRpY2UKCiMjIFZ5dHZvcmVuaWUgbWF0w61jCgpgYGB7cn0KbSA8LSBtYXRyaXgoMToxMiwgbnJvdyA9IDMsIG5jb2wgPSA0KSAgICAgICAgICAgIAptX2J5cm93IDwtIG1hdHJpeCgxOjEyLCBucm93ID0gMywgYnlyb3cgPSBUUlVFKSAgCm07IG1fYnlyb3cKYGBgCgojIyBSb3ptZXJ5IG1hdGljZQoKYGBge3J9CmRpbShtKSAgICAgICAgICAgICAgICAgICAKbQpgYGAKCiMjIEFkcmVzb3ZhbmllIHBydmtvdiBtYXRpY2UKCmBgYHtyfQptWzEsIDJdICAgICAgCm1bICwgM10gICAgICAKbVsyLCBdICAgICAgIAptWzE6MiwgMjozXSAgCmBgYAoKIyMgTWF0aWNvdsOpIG9wZXLDoWNpZQoKYGBge3J9CkEgPC0gbWF0cml4KGMoMyw3LDgsOSksIG5yb3cgPSAyKQpCIDwtIG1hdHJpeChjKDUsNiw3LDgpLCBucm93ID0gMikKCkEgKyBCICAgICAgICAjIHNjaXRhbmllIG1hdGljCkEgKiBCICAgICAgICAjIEhhZGFtYXJkIHByb2R1Y3QgLSBuYXNvYmVuaWUgcG8gem9kcG92ZWRhanVjaWNoIHBydmtvY2gKQSAlKiUgQiAgICAgICMgbmFzb2JlbmllIG1hdGljCnQoQSkgICAgICAgICAjIHRyYW5zcG96aWNpYSBtYXRpY2UgQSAtIHZ5bWVuYSByaWFka292IGEgc3RscGNvdgpkZXQoQSkgICAgICAgIyBkZXRlcm1pbmFudCBtYXRpY2UKc29sdmUoQSkgICAgICMgaW52ZXJ6aWEgbWF0aWNlIChhayBqZSBtYXRpY2EgcmVndWxhcm5hIC0gdGVkYSBpbnZlcnppYSBzYSBkYSBzcG9jaXRhdCkKYGBgCgojIyBabHXEjW92YW5pZSB2ZWt0b3JvdiBkbyBtYXTDrWMgCgpgYGB7cn0KQyA8LSBjYmluZCgxOjMsIDQ6NikgICAjICAtIHBvIHN0bHBjb2NoIApEIDwtIHJiaW5kKDE6MywgNDo2KSAgICMgIC0gcG8gcmlhZGtvY2ggCkM7IEQKYGBgCgojIyBWeXBvxI3DrXRhbmllIHp2b2xlbmVqIMWhdGF0aXN0aWt5IHBvIHJpYWRrb2NoIChzdMS6cGNvY2gpIG1hdGljZQoKYGBge3J9Ck0gPC0gbWF0cml4KDE6MTIsIG5yb3cgPSAzKQpNCmFwcGx5KE0sIDEsIHN1bSkgICAjIHN1bWEgcG8gcmlhZGtvY2gKYXBwbHkoTSwgMiwgbWVhbikgICMgcHJpZW1lcnkgcG8gc3TEunBjb2NoCmBgYAoKIyMgTWFsw6kgY3ZpxI1lbmllCgpgYGB7cn0KTTIgPC0gbWF0cml4KDE6MzYsIG5yb3cgPSA2LCBieXJvdyA9IFRSVUUpCmNvbFN1bXMoTTIpCnQoTTIpICUqJSBNMgpgYGAKCi0tLQoKCgoKCgoK