1. Logické hodnoty a operátory

2.1 TRUE/FALSE a základné operácie

a <- TRUE; b <- FALSE

a & b      # logický AND
[1] FALSE
a | b      # logický OR
[1] TRUE
!a         # negácia
[1] FALSE
xor(a, b)  # výlučné alebo
[1] TRUE

2.2 Porovnávanie čísel a reťazcov

x <- 12; y <- 5
x > y; x <= y; x == 12
[1] TRUE
[1] FALSE
[1] TRUE
txt1 <- "R"; txt2 <- "Python"
txt1 == txt2
[1] FALSE

Malé cvičenie – logické

Zadanie:
Nech vek <- 17 a student <- TRUE.
Určte, či má osoba nárok na zľavu, ak platí: zľava = vek < 18 a je študent.

Riešenie:

vek <- 17; student <- TRUE
zlava <- (vek < 18) & student
zlava
[1] TRUE

3. Vektory

3.1 Vytváranie vektorov

vek <- c(18, 20, 22, 19, 21)
mena <- c("Eva", "Marek", "Tomáš", "Lucia", "Nina")

vek; mena
[1] 18 20 22 19 21
[1] "Eva"   "Marek" "Tomáš" "Lucia" "Nina" 

3.2 Operácie s vektormi

vek + 1
[1] 19 21 23 20 22
vek > 20
[1] FALSE FALSE  TRUE FALSE  TRUE
mean(vek)
[1] 20
min(vek); max(vek)
[1] 18
[1] 22

3.3 Indexovanie a prístup k prvkom

vek[1]      # prvý prvok
[1] 18
vek[3:5]    # tretí až piaty
[1] 22 19 21
mena[vek > 20]   # mená s vekom > 20
[1] "Tomáš" "Nina" 

Malé cvičenie – vektory

Zadanie:
Vytvorte vektor teplôt za 5 dní a vypočítajte priemernú teplotu.
Zistite, v ktoré dni bola teplota vyššia ako priemer.

Riešenie:

teploty <- c(19, 21, 23, 20, 22)
priemer <- mean(teploty)
nad_priemer <- teploty > priemer
priemer; nad_priemer
[1] 21
[1] FALSE FALSE  TRUE FALSE  TRUE

4. Matice

4.1 Tvorba matíc

m <- matrix(1:9, nrow = 3, ncol = 3)
m
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

4.2 Operácie s maticami

t(m)        # transpozícia
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
m * 2       # násobenie skalárom
     [,1] [,2] [,3]
[1,]    2    8   14
[2,]    4   10   16
[3,]    6   12   18
m + m       # sčítanie matíc
     [,1] [,2] [,3]
[1,]    2    8   14
[2,]    4   10   16
[3,]    6   12   18
m %*% m     # maticový súčin
     [,1] [,2] [,3]
[1,]   30   66  102
[2,]   36   81  126
[3,]   42   96  150

4.3 Prístup k prvkom

m[1, 2]     # prvok v 1. riadku, 2. stĺpci
[1] 4
m[, 1]      # prvý stĺpec
[1] 1 2 3
m[2, ]      # druhý riadok
[1] 2 5 8

Malé cvičenie – matice

Zadanie:
Vytvorte maticu 2x3 obsahujúcu čísla 10 až 15.
Vypočítajte jej transpozíciu a súčet všetkých prvkov.

Riešenie:

mat <- matrix(10:15, nrow = 2, ncol = 3)
transp <- t(mat)
sucet <- sum(mat)
mat; transp; sucet
     [,1] [,2] [,3]
[1,]   10   12   14
[2,]   11   13   15
     [,1] [,2]
[1,]   10   11
[2,]   12   13
[3,]   14   15
[1] 75

Môj návrh použitia novinky

Príklad – priemery riadkov a stĺpcov

m <- matrix(c(2,4,6,8,10,12), nrow = 3, ncol = 2)
m
     [,1] [,2]
[1,]    2    8
[2,]    4   10
[3,]    6   12
# priemery riadkov
rowMeans(m)
[1] 5 7 9
# priemery stĺpcov
colMeans(m)
[1]  4 10
# vlastná funkcia na zistenie, či priemer riadku > 5
apply(m, 1, function(x) mean(x) > 5)
[1] FALSE  TRUE  TRUE

Bonus:

library(dplyr)

data <- data.frame(
  Meno = c("Eva", "Marek", "Lucia"),
  Body1 = c(15, 12, 18),
  Body2 = c(14, 17, 19)
)

data %>%
  mutate(Priemer = (Body1 + Body2)/2) %>%
  filter(Priemer > 15)

uhloha

mena <- c("Adam", "Beáta", "Cyril", "Dana", "Eva")
body <- c(48, 75, 62, 49, 91)

splnil <- body >= 50
sprava <- paste("Študent", mena, 
                "- výsledok:", body, "bodov –",
                ifelse(splnil, "Splnil", "Nesplnil"))

sprava
[1] "Študent Adam - výsledok: 48 bodov – Nesplnil"
[2] "Študent Beáta - výsledok: 75 bodov – Splnil" 
[3] "Študent Cyril - výsledok: 62 bodov – Splnil" 
[4] "Študent Dana - výsledok: 49 bodov – Nesplnil"
[5] "Študent Eva - výsledok: 91 bodov – Splnil"   
mena_uspesni <- mena[splnil]


uspesni <- toupper(mena_uspesni)
veta <- paste("Úspešní študenti sú:", paste(uspesni, collapse = ", "))
veta
[1] "Úspešní študenti sú: BEÁTA, CYRIL, EVA"
LS0tCnRpdGxlOiAiWsOha2xhZG7DqSBvcGVyw6FjaWUgdiBSMi4iCmF1dGhvcjogIkzDrXZpYSBNZWxpY2hvdsOhICIKZGF0ZTogIlNlcHRlbWJlciAyMDI1IgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgaGlnaGxpZ2h0OiB0YW5nbwplZGl0b3Jfb3B0aW9uczogCiAgbWFya2Rvd246IAogICAgd3JhcDogNzIKLS0tCjxzdHlsZT4KYm9keSB7CiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEyMGRlZywgI2ZmZTZmMCAwJSwgI2ZmZjhmYiAxMDAlKTsKICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2h0dHBzOi8vd3d3LmN1a3JhcnNreXN2ZXQuc2svZm90a3k4MDc3L2ZvdG9zL192eXJuXzgwMTUzMzkuanBnJyk7CiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDsKICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgdG9wOwogIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjsKICBjb2xvcjogIzNjMmEzYTsKICBmb250LWZhbWlseTogIkNvbWljIFNhbnMgTVMiLCAiU2Vnb2UgVUkiLCBzYW5zLXNlcmlmOwp9Cjwvc3R5bGU+CgoKCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogIGVjaG8gPSBUUlVFLAogIG1lc3NhZ2UgPSBGQUxTRSwKICB3YXJuaW5nID0gRkFMU0UKKQpgYGAKCgoKIyAxLiBMb2dpY2vDqSBob2Rub3R5IGEgb3BlcsOhdG9yeQoKIyMgMi4xIFRSVUUvRkFMU0UgYSB6w6FrbGFkbsOpIG9wZXLDoWNpZQoKYGBge3J9CmEgPC0gVFJVRTsgYiA8LSBGQUxTRQoKYSAmIGIgICAgICAjIGxvZ2lja8O9IEFORAphIHwgYiAgICAgICMgbG9naWNrw70gT1IKIWEgICAgICAgICAjIG5lZ8OhY2lhCnhvcihhLCBiKSAgIyB2w71sdcSNbsOpIGFsZWJvCmBgYAoKIyMgMi4yIFBvcm92bsOhdmFuaWUgxI3DrXNlbCBhIHJlxaVhemNvdgoKYGBge3J9CnggPC0gMTI7IHkgPC0gNQp4ID4geTsgeCA8PSB5OyB4ID09IDEyCgp0eHQxIDwtICJSIjsgdHh0MiA8LSAiUHl0aG9uIgp0eHQxID09IHR4dDIKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUg4oCTIGxvZ2lja8OpCgoqKlphZGFuaWU6KiogIApOZWNoIGB2ZWsgPC0gMTdgIGEgYHN0dWRlbnQgPC0gVFJVRWAuICAKVXLEjXRlLCDEjWkgbcOhIG9zb2JhIG7DoXJvayBuYSB6xL5hdnUsIGFrIHBsYXTDrTogKnrEvmF2YSA9IHZlayA8IDE4IGEgamUgxaF0dWRlbnQqLgoKKipSaWXFoWVuaWU6KioKCmBgYHtyfQp2ZWsgPC0gMTc7IHN0dWRlbnQgPC0gVFJVRQp6bGF2YSA8LSAodmVrIDwgMTgpICYgc3R1ZGVudAp6bGF2YQpgYGAKCi0tLQoKIyAzLiBWZWt0b3J5CgojIyAzLjEgVnl0dsOhcmFuaWUgdmVrdG9yb3YKCmBgYHtyfQp2ZWsgPC0gYygxOCwgMjAsIDIyLCAxOSwgMjEpCm1lbmEgPC0gYygiRXZhIiwgIk1hcmVrIiwgIlRvbcOhxaEiLCAiTHVjaWEiLCAiTmluYSIpCgp2ZWs7IG1lbmEKYGBgCgojIyAzLjIgT3BlcsOhY2llIHMgdmVrdG9ybWkKCmBgYHtyfQp2ZWsgKyAxCnZlayA+IDIwCm1lYW4odmVrKQptaW4odmVrKTsgbWF4KHZlaykKYGBgCgojIyAzLjMgSW5kZXhvdmFuaWUgYSBwcsOtc3R1cCBrIHBydmtvbQoKYGBge3J9CnZla1sxXSAgICAgICMgcHJ2w70gcHJ2b2sKdmVrWzM6NV0gICAgIyB0cmV0w60gYcW+IHBpYXR5Cm1lbmFbdmVrID4gMjBdICAgIyBtZW7DoSBzIHZla29tID4gMjAKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUg4oCTIHZla3RvcnkKCioqWmFkYW5pZToqKiAgClZ5dHZvcnRlIHZla3RvciB0ZXBsw7R0IHphIDUgZG7DrSBhIHZ5cG/EjcOtdGFqdGUgcHJpZW1lcm7DuiB0ZXBsb3R1LiAgClppc3RpdGUsIHYga3RvcsOpIGRuaSBib2xhIHRlcGxvdGEgdnnFocWhaWEgYWtvIHByaWVtZXIuCgoqKlJpZcWhZW5pZToqKgoKYGBge3J9CnRlcGxvdHkgPC0gYygxOSwgMjEsIDIzLCAyMCwgMjIpCnByaWVtZXIgPC0gbWVhbih0ZXBsb3R5KQpuYWRfcHJpZW1lciA8LSB0ZXBsb3R5ID4gcHJpZW1lcgpwcmllbWVyOyBuYWRfcHJpZW1lcgpgYGAKCi0tLQoKIyA0LiBNYXRpY2UKCiMjIDQuMSBUdm9yYmEgbWF0w61jCgpgYGB7cn0KbSA8LSBtYXRyaXgoMTo5LCBucm93ID0gMywgbmNvbCA9IDMpCm0KYGBgCgojIyA0LjIgT3BlcsOhY2llIHMgbWF0aWNhbWkKCmBgYHtyfQp0KG0pICAgICAgICAjIHRyYW5zcG96w61jaWEKbSAqIDIgICAgICAgIyBuw6Fzb2JlbmllIHNrYWzDoXJvbQptICsgbSAgICAgICAjIHPEjcOtdGFuaWUgbWF0w61jCm0gJSolIG0gICAgICMgbWF0aWNvdsO9IHPDusSNaW4KYGBgCgojIyA0LjMgUHLDrXN0dXAgayBwcnZrb20KCmBgYHtyfQptWzEsIDJdICAgICAjIHBydm9rIHYgMS4gcmlhZGt1LCAyLiBzdMS6cGNpCm1bLCAxXSAgICAgICMgcHJ2w70gc3TEunBlYwptWzIsIF0gICAgICAjIGRydWjDvSByaWFkb2sKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUg4oCTIG1hdGljZQoKKipaYWRhbmllOioqICAKVnl0dm9ydGUgbWF0aWN1IDJ4MyBvYnNhaHVqw7pjdSDEjcOtc2xhIDEwIGHFviAxNS4gIApWeXBvxI3DrXRhanRlIGplaiB0cmFuc3BvesOtY2l1IGEgc8O6xI1ldCB2xaFldGvDvWNoIHBydmtvdi4KCioqUmllxaFlbmllOioqCgpgYGB7cn0KbWF0IDwtIG1hdHJpeCgxMDoxNSwgbnJvdyA9IDIsIG5jb2wgPSAzKQp0cmFuc3AgPC0gdChtYXQpCnN1Y2V0IDwtIHN1bShtYXQpCm1hdDsgdHJhbnNwOyBzdWNldApgYGAKCi0tLQoKIyBNw7RqIG7DoXZyaCBwb3XFvml0aWEgbm92aW5reQoKCgojIyBQcsOta2xhZCDigJMgcHJpZW1lcnkgcmlhZGtvdiBhIHN0xLpwY292CgpgYGB7cn0KbSA8LSBtYXRyaXgoYygyLDQsNiw4LDEwLDEyKSwgbnJvdyA9IDMsIG5jb2wgPSAyKQptCgojIHByaWVtZXJ5IHJpYWRrb3YKcm93TWVhbnMobSkKCiMgcHJpZW1lcnkgc3TEunBjb3YKY29sTWVhbnMobSkKCiMgdmxhc3Ruw6EgZnVua2NpYSBuYSB6aXN0ZW5pZSwgxI1pIHByaWVtZXIgcmlhZGt1ID4gNQphcHBseShtLCAxLCBmdW5jdGlvbih4KSBtZWFuKHgpID4gNSkKYGBgCgojIyBCb251czogCgpgYGB7cn0KbGlicmFyeShkcGx5cikKCmRhdGEgPC0gZGF0YS5mcmFtZSgKICBNZW5vID0gYygiRXZhIiwgIk1hcmVrIiwgIkx1Y2lhIiksCiAgQm9keTEgPSBjKDE1LCAxMiwgMTgpLAogIEJvZHkyID0gYygxNCwgMTcsIDE5KQopCgpkYXRhICU+JQogIG11dGF0ZShQcmllbWVyID0gKEJvZHkxICsgQm9keTIpLzIpICU+JQogIGZpbHRlcihQcmllbWVyID4gMTUpCmBgYAoKLS0tCgojIHVobG9oYSAKYGBge3J9Cm1lbmEgPC0gYygiQWRhbSIsICJCZcOhdGEiLCAiQ3lyaWwiLCAiRGFuYSIsICJFdmEiKQpib2R5IDwtIGMoNDgsIDc1LCA2MiwgNDksIDkxKQoKc3BsbmlsIDwtIGJvZHkgPj0gNTAKc3ByYXZhIDwtIHBhc3RlKCLFoHR1ZGVudCIsIG1lbmEsIAogICAgICAgICAgICAgICAgIi0gdsO9c2xlZG9rOiIsIGJvZHksICJib2RvdiDigJMiLAogICAgICAgICAgICAgICAgaWZlbHNlKHNwbG5pbCwgIlNwbG5pbCIsICJOZXNwbG5pbCIpKQoKc3ByYXZhCm1lbmFfdXNwZXNuaSA8LSBtZW5hW3NwbG5pbF0KCgp1c3Blc25pIDwtIHRvdXBwZXIobWVuYV91c3Blc25pKQp2ZXRhIDwtIHBhc3RlKCLDmnNwZcWhbsOtIMWhdHVkZW50aSBzw7o6IiwgcGFzdGUodXNwZXNuaSwgY29sbGFwc2UgPSAiLCAiKSkKdmV0YQoKYGBgCgoKCg==