Úvod

knitr::opts_chunk$set(echo = TRUE)

Skaláre

Numerické skaláre

a <- 10
b <- 3

a + b
[1] 13
a^2
[1] 100
a %% b
[1] 1

Text

Vytváranie textových premenných a práca s nimi

first <- "Livia"
last  <- "Pancikova"
full_name <- paste(first, last)      # spojí s medzerou
full_nospace <- paste0(first, last)  # spojí bez medzery

full_name
[1] "Livia Pancikova"
full_nospace
[1] "LiviaPancikova"
sentence <- "R Markdown mi pomaha robit pekne reporty."
nchar(sentence)
[1] 41
substr(sentence, 1, 10)
[1] "R Markdown"

Malé cvičenie

Vypíš časť emailu pred znakom @.

email <- "livia.pancikova@uniba.sk"
at_pos <- regexpr("@", email)
substr(email, 1, at_pos - 1)
[1] "livia.pancikova"

Logické hodnoty

Základy

p <- TRUE
q <- FALSE

!p
[1] FALSE
p & q
[1] FALSE
p | q
[1] TRUE
xor(p, q)
[1] TRUE
x <- 12
x > 10
[1] TRUE
x == 12
[1] TRUE
x != 5
[1] TRUE

Malé cvičenie

Over, či je t medzi 30 a 50 a zároveň nepárne.

v1 <- c(2, 4, 6, 8)
v2 <- 1:10
v3 <- seq(from = 0, to = 1, by = 0.2)
v4 <- rep(5, times = 4)

v1
[1] 2 4 6 8
v2
 [1]  1  2  3  4  5  6  7  8  9 10
v3
[1] 0.0 0.2 0.4 0.6 0.8 1.0
v4
[1] 5 5 5 5

Numerické vektory

Generovanie vektorov

v <- c(1, 3, 5, 7)

v + 2
[1] 3 5 7 9
v * 3
[1]  3  9 15 21
mean(v)
[1] 4
sum(v)
[1] 16
max(v)
[1] 7
sort(v, decreasing = TRUE)
[1] 7 5 3 1

Aritmetické operácie s vektormi

x <- c(10, 25, 8, 42, 17, 30)

x[1]
[1] 10
x[2:4]
[1] 25  8 42
x[x > 20]
[1] 25 42 30
which(x > 20)
[1] 2 4 6

Indexovanie a výber prvkov

w <- 1:20
div4 <- w[w %% 4 == 0]

sum(div4)
[1] 60
length(div4)
[1] 5
mean(div4)
[1] 12

Malé cvičenie

Vytvorte vektor w <- 1:20.

  1. Spočítajte všetky čísla deliteľné 4.
  2. Zistite ich počet.
  3. Vypočítajte ich priemer.
M <- matrix(1:12, nrow = 3, ncol = 4)     # po stĺpcoch (default)
M
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
dim(M)
[1] 3 4

Matice

Vytvorenie matice a rozmery

M[1, 2]     # 1. riadok, 2. stĺpec
[1] 4
M[, 3]      # celý 3. stĺpec
[1] 7 8 9
M[2, ]      # celý 2. riadok
[1]  2  5  8 11
M[1:2, 2:3] # podmatica
     [,1] [,2]
[1,]    4    7
[2,]    5    8
A <- matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE)
B <- matrix(c(5, 6, 7, 8), nrow = 2, byrow = TRUE)

A + B
     [,1] [,2]
[1,]    6    8
[2,]   10   12
A * B        # Hadamardov súčin (po prvkoch)
     [,1] [,2]
[1,]    5   12
[2,]   21   32
A %*% B      # maticové násobenie
     [,1] [,2]
[1,]   19   22
[2,]   43   50
t(A)         # transpozícia
     [,1] [,2]
[1,]    1    3
[2,]    2    4
det(A)
[1] -2
solve(A)
     [,1] [,2]
[1,] -2.0  1.0
[2,]  1.5 -0.5
M2 <- matrix(1:25, nrow = 5, byrow = TRUE)
colSums(M2)
[1] 55 60 65 70 75
t(M2) %*% M2
     [,1] [,2] [,3] [,4] [,5]
[1,]  855  910  965 1020 1075
[2,]  910  970 1030 1090 1150
[3,]  965 1030 1095 1160 1225
[4,] 1020 1090 1160 1230 1300
[5,] 1075 1150 1225 1300 1375
set.seed(123)

# Vytvoríme si jednoduché "dáta o študentoch"
students <- data.frame(
  meno = c("Anna", "Boris", "Cecilia", "Dano", "Eva", "Filip"),
  skupina = sample(c("A", "B"), size = 6, replace = TRUE),
  body = sample(50:100, size = 6, replace = TRUE)
)

students

# Priemer bodov podľa skupiny (novinka: aggregate)
aggregate(body ~ skupina, data = students, FUN = mean)

Môj návrh použitia novinky

set.seed(123)

# Vytvoríme si jednoduché "dáta o študentoch"
students <- data.frame(
  meno = c("Anna", "Boris", "Cecilia", "Dano", "Eva", "Filip"),
  skupina = sample(c("A", "B"), size = 6, replace = TRUE),
  body = sample(50:100, size = 6, replace = TRUE)
)

students

# Priemer bodov podľa skupiny (novinka: aggregate)
aggregate(body ~ skupina, data = students, FUN = mean)
LS0tCnRpdGxlOiAiWsOha2xhZG7DqSBvcGVyw6FjaWUgdiBSIOKAkyBtw7RqIGN2acSNZWJuw70gbm90ZWJvb2siCmF1dGhvcjogIlZhxaFlIG1lbm8gIDxicj4gKHMgdnl1xb5pdMOtbSBDaGF0R1BUKSIKZGF0ZTogIkZlYnJ1w6FyIDIwMjYiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0aGVtZTogZmxhdGx5CiAgICBoaWdobGlnaHQ6IHRhbmdvCmVkaXRvcl9vcHRpb25zOiAKICBtYXJrZG93bjogCiAgICB3cmFwOiA3MgotLS0KIyDDmnZvZAoKYGBge3Igc2V0dXB9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgojIFNrYWzDoXJlCgojIyBOdW1lcmlja8OpIHNrYWzDoXJlCgpgYGB7cn0KYSA8LSAxMApiIDwtIDMKCmEgKyBiCmFeMgphICUlIGIKYGBgCgojIFRleHQKCiMjIFZ5dHbDoXJhbmllIHRleHRvdsO9Y2ggcHJlbWVubsO9Y2ggYSBwcsOhY2EgcyBuaW1pCgpgYGB7cn0KZmlyc3QgPC0gIkxpdmlhIgpsYXN0ICA8LSAiUGFuY2lrb3ZhIgpgYGAKCmBgYHtyfQpmdWxsX25hbWUgPC0gcGFzdGUoZmlyc3QsIGxhc3QpICAgICAgIyBzcG9qw60gcyBtZWR6ZXJvdQpmdWxsX25vc3BhY2UgPC0gcGFzdGUwKGZpcnN0LCBsYXN0KSAgIyBzcG9qw60gYmV6IG1lZHplcnkKCmZ1bGxfbmFtZQpmdWxsX25vc3BhY2UKCnNlbnRlbmNlIDwtICJSIE1hcmtkb3duIG1pIHBvbWFoYSByb2JpdCBwZWtuZSByZXBvcnR5LiIKbmNoYXIoc2VudGVuY2UpCnN1YnN0cihzZW50ZW5jZSwgMSwgMTApCmBgYAoKIyMgTWFsw6kgY3ZpxI1lbmllCj4gVnlww63FoSDEjWFzxaUgZW1haWx1IHByZWQgem5ha29tIEAuCgpgYGB7cn0KZW1haWwgPC0gImxpdmlhLnBhbmNpa292YUB1bmliYS5zayIKYXRfcG9zIDwtIHJlZ2V4cHIoIkAiLCBlbWFpbCkKc3Vic3RyKGVtYWlsLCAxLCBhdF9wb3MgLSAxKQpgYGAKCgojIExvZ2lja8OpIGhvZG5vdHkKCiMjIFrDoWtsYWR5CgpgYGB7cn0KcCA8LSBUUlVFCnEgPC0gRkFMU0UKCiFwCnAgJiBxCnAgfCBxCnhvcihwLCBxKQoKeCA8LSAxMgp4ID4gMTAKeCA9PSAxMgp4ICE9IDUKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUKPiBPdmVyLCDEjWkgamUgdCBtZWR6aSAzMCBhIDUwIGEgesOhcm92ZcWIIG5lcMOhcm5lLgpgYGB7cn0KdCA8LSAzNwoodCA+PSAzMCAmIHQgPD0gNTApICYgKHQgJSUgMiAhPSAwKQpgYGAKCiMgTnVtZXJpY2vDqSB2ZWt0b3J5CgojIyBHZW5lcm92YW5pZSB2ZWt0b3JvdgoKYGBge3J9CnYxIDwtIGMoMiwgNCwgNiwgOCkKdjIgPC0gMToxMAp2MyA8LSBzZXEoZnJvbSA9IDAsIHRvID0gMSwgYnkgPSAwLjIpCnY0IDwtIHJlcCg1LCB0aW1lcyA9IDQpCgp2MQp2Mgp2Mwp2NApgYGAKCiMjIEFyaXRtZXRpY2vDqSBvcGVyw6FjaWUgcyB2ZWt0b3JtaQoKYGBge3J9CnYgPC0gYygxLCAzLCA1LCA3KQoKdiArIDIKdiAqIDMKbWVhbih2KQpzdW0odikKbWF4KHYpCnNvcnQodiwgZGVjcmVhc2luZyA9IFRSVUUpCmBgYAoKIyMgSW5kZXhvdmFuaWUgYSB2w71iZXIgcHJ2a292CgpgYGB7cn0KeCA8LSBjKDEwLCAyNSwgOCwgNDIsIDE3LCAzMCkKCnhbMV0KeFsyOjRdCnhbeCA+IDIwXQp3aGljaCh4ID4gMjApCmBgYAoKIyMgTWFsw6kgY3ZpxI1lbmllCj4gVnl0dm9ydGUgdmVrdG9yIGB3IDwtIDE6MjBgLgo+IAo+IDEpIFNwb8SNw610YWp0ZSB2xaFldGt5IMSNw61zbGEgZGVsaXRlxL5uw6kgNC4gIAo+IDIpIFppc3RpdGUgaWNoIHBvxI1ldC4gIAo+IDMpIFZ5cG/EjcOtdGFqdGUgaWNoIHByaWVtZXIuCgpgYGB7cn0KdyA8LSAxOjIwCmRpdjQgPC0gd1t3ICUlIDQgPT0gMF0KCnN1bShkaXY0KQpsZW5ndGgoZGl2NCkKbWVhbihkaXY0KQpgYGAKCiMgTWF0aWNlCgojIyBWeXR2b3JlbmllIG1hdGljZSBhIHJvem1lcnkKCmBgYHtyfQpNIDwtIG1hdHJpeCgxOjEyLCBucm93ID0gMywgbmNvbCA9IDQpICAgICAjIHBvIHN0xLpwY29jaCAoZGVmYXVsdCkKTQpkaW0oTSkKYGBgCgpgYGB7cn0KTVsxLCAyXSAgICAgIyAxLiByaWFkb2ssIDIuIHN0xLpwZWMKTVssIDNdICAgICAgIyBjZWzDvSAzLiBzdMS6cGVjCk1bMiwgXSAgICAgICMgY2Vsw70gMi4gcmlhZG9rCk1bMToyLCAyOjNdICMgcG9kbWF0aWNhCmBgYAoKYGBge3J9CkEgPC0gbWF0cml4KGMoMSwgMiwgMywgNCksIG5yb3cgPSAyLCBieXJvdyA9IFRSVUUpCkIgPC0gbWF0cml4KGMoNSwgNiwgNywgOCksIG5yb3cgPSAyLCBieXJvdyA9IFRSVUUpCgpBICsgQgpBICogQiAgICAgICAgIyBIYWRhbWFyZG92IHPDusSNaW4gKHBvIHBydmtvY2gpCkEgJSolIEIgICAgICAjIG1hdGljb3bDqSBuw6Fzb2JlbmllCnQoQSkgICAgICAgICAjIHRyYW5zcG96w61jaWEKZGV0KEEpCnNvbHZlKEEpCmBgYAoKYGBge3J9Ck0yIDwtIG1hdHJpeCgxOjI1LCBucm93ID0gNSwgYnlyb3cgPSBUUlVFKQpjb2xTdW1zKE0yKQp0KE0yKSAlKiUgTTIKYGBgCgojIE3DtGogbsOhdnJoIHBvdcW+aXRpYSBub3Zpbmt5CgpgYGB7cn0Kc2V0LnNlZWQoMTIzKQoKIyBWeXR2b3LDrW1lIHNpIGplZG5vZHVjaMOpICJkw6F0YSBvIMWhdHVkZW50b2NoIgpzdHVkZW50cyA8LSBkYXRhLmZyYW1lKAogIG1lbm8gPSBjKCJBbm5hIiwgIkJvcmlzIiwgIkNlY2lsaWEiLCAiRGFubyIsICJFdmEiLCAiRmlsaXAiKSwKICBza3VwaW5hID0gc2FtcGxlKGMoIkEiLCAiQiIpLCBzaXplID0gNiwgcmVwbGFjZSA9IFRSVUUpLAogIGJvZHkgPSBzYW1wbGUoNTA6MTAwLCBzaXplID0gNiwgcmVwbGFjZSA9IFRSVUUpCikKCnN0dWRlbnRzCgojIFByaWVtZXIgYm9kb3YgcG9kxL5hIHNrdXBpbnkgKG5vdmlua2E6IGFnZ3JlZ2F0ZSkKYWdncmVnYXRlKGJvZHkgfiBza3VwaW5hLCBkYXRhID0gc3R1ZGVudHMsIEZVTiA9IG1lYW4pCmBgYAoK