Numerické vektory
Generovanie vektorov
v1 <- c(5, 10, 15, 20) # nový vektor
v2 <- 2:6 # postupnosť 2,3,4,5,6
v3 <- seq(from = 0.1, to = 1.1, by = 0.25) # postupnosť s krokom 0.25
v4 <- rep(7, times = 5) # 7,7,7,7,7
v5 <- runif(5) # nové náhodné rovnomerne rozdelené hodnoty
v6 <- rnorm(5) # nové náhodné normalne rozdelené hodnoty
v1; v2; v3; v4; v5; v6
[1] 5 10 15 20
[1] 2 3 4 5 6
[1] 0.10 0.35 0.60 0.85 1.10
[1] 7 7 7 7 7
[1] 0.07380982 0.33158668 0.51388773 0.88094736 0.27984359
[1] 0.5445325 -0.1445315 -0.6416318 -0.7912897 -0.7487980
Aritmetické operácie s vektormi
v <- c(5, 10, 15, 20)
v + 7 # každý prvok vektora zväčšíme o 7
[1] 12 17 22 27
v * 3 # každý prvok vektora vynásobíme 3
[1] 15 30 45 60
(v + 2) / 4 # každý prvok zvýšený o 2 a potom vydelený 4
[1] 1.75 3.00 4.25 5.50
exp(v) # exponenciálna funkcia z každého prvku vektora
[1] 1.484132e+02 2.202647e+04 3.269017e+06 4.851652e+08
sum(c(2,4,6), c(1,1,1)) # skalárny súčin - výsledok je skalar
[1] 15
crossprod(c(2,4,6), c(1,1,1)) # skalárny súčin - výsledok je matica 1x1
[,1]
[1,] 12
c(2,4,6) * c(1,2,3) # Hadamardov súčin (súčin zodpovedajúcich prvkov)
[1] 2 8 18
Matematické operácie s 2 vektormi rovnakého rozmeru
# Dĺžka vektora
length(c(10, 20, 30, 40, 50))
[1] 5
# Dĺžka vektora v5 (náhodne generovaný)
length(v5)
[1] 5
# Sčítanie dvoch vektorov rovnakej dĺžky
c(10, 20, 30, 40, 50) + v5 # oba vektory musia mať rovnaký rozmer
[1] 10.07381 20.33159 30.51389 40.88095 50.27984
Indexovanie a výber niektorych prvkov vektora
x <- c(8, 15, 2, 19, 6, 1, 23)
x[1] # prvý prvok vektora x
[1] 8
x[2:4] # druhý až štvrtý prvok vektora x
[1] 15 2 19
x[-1] # všetky prvky okrem prvého
[1] 15 2 19 6 1 23
x[x > 12] # všetky prvky väčšie ako 12
[1] 15 19 23
which(x > 12) # indexy prvkov väčších ako 12
[1] 2 4 7
Práca s chýbajúcimi hodnotami
y <- c(2, NA, 6, NA, 10)
# Zistenie, ktoré prvky sú NA
is.na(y)
[1] FALSE TRUE FALSE TRUE FALSE
# Priemer s NA → výsledok je NA
mean(y)
[1] NA
# Priemer bez NA → NA sa ignorujú
mean(y, na.rm = TRUE)
[1] 6
Základné štatistiky a usporiadanie prvkov vektora podľa
veľkosti
z <- c(7, 12, 4, 9, 15)
mean(z) # priemerná hodnota
[1] 9.4
sd(z) # štandardná odchýlka
[1] 4.27785
max(z) # maximálna hodnota
[1] 15
summary(z) # rýchly prehľad základných štatistík o vektore
Min. 1st Qu. Median Mean 3rd Qu. Max.
4.0 7.0 9.0 9.4 12.0 15.0
sort(z) # rastúce usporiadanie
[1] 4 7 9 12 15
sort(z, decreasing = TRUE) # klesajúce usporiadanie
[1] 15 12 9 7 4
Malé cvičenie
Vytvorte vektor w
s číslami 1..20 a vypočítajte sumu
všetkých párnych čísel.
w <- 5:25 # nový vektor od 5 do 25
# Sčítanie párnych čísel vo vektore
sum(w[w %% 2 == 0])
[1] 150
Matice
Vytvorenie matíc
# Matica zadávaná po stĺpcoch
m <- matrix(5:16, nrow = 3, ncol = 4)
# Matica zadávaná po riadkoch
m_byrow <- matrix(5:16, nrow = 3, byrow = TRUE)
m
[,1] [,2] [,3] [,4]
[1,] 5 8 11 14
[2,] 6 9 12 15
[3,] 7 10 13 16
[,1] [,2] [,3] [,4]
[1,] 5 6 7 8
[2,] 9 10 11 12
[3,] 13 14 15 16
Rozmery matice
# Matica
m <- matrix(5:16, nrow = 3, ncol = 4)
# Rozmery matice (počet riadkov a stĺpcov)
dim(m)
[1] 3 4
[,1] [,2] [,3] [,4]
[1,] 5 8 11 14
[2,] 6 9 12 15
[3,] 7 10 13 16
Adresovanie prvkov matice
# Prístup k jednotlivým prvkom a podmaticiam
m[1, 2] # prvok v 1. riadku a 2. stĺpci
[1] 8
m[, 3] # všetky prvky v 3. stĺpci (3x1)
[1] 11 12 13
m[2, ] # všetky prvky v 2. riadku (1x4)
[1] 6 9 12 15
m[1:2, 2:3] # podmatica: riadky 1 a 2, stĺpce 2 a 3
[,1] [,2]
[1,] 8 11
[2,] 9 12
Maticové operácie
# Definícia matíc
A <- matrix(c(2, 4, 6, 8), nrow = 2)
B <- matrix(c(1, 3, 5, 7), nrow = 2)
# Operácie s maticami
A + B # sčítanie matic
[,1] [,2]
[1,] 3 11
[2,] 7 15
A * B # Hadamardov súčin (po prvkoch)
[,1] [,2]
[1,] 2 30
[2,] 12 56
A %*% B # klasické násobenie matic
[,1] [,2]
[1,] 20 52
[2,] 28 76
t(A) # transpozícia matice A
[,1] [,2]
[1,] 2 4
[2,] 6 8
det(A) # determinant matice A
[1] -8
solve(A) # inverzia matice A (ak je regulárna)
[,1] [,2]
[1,] -1.0 0.75
[2,] 0.5 -0.25
Zlučovanie vektorov do matíc
C <- cbind(7:9, 10:12) # - po stlpcoch
D <- rbind(7:9, 10:12) # - po riadkoch
C; D
[,1] [,2]
[1,] 7 10
[2,] 8 11
[3,] 9 12
[,1] [,2] [,3]
[1,] 7 8 9
[2,] 10 11 12
Vypočítanie zvolenej štatistiky po riadkoch (stĺpcoch) matice
M <- matrix(10:18, nrow = 3)
M
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
apply(M, 1, sum) # suma po riadkoch
[1] 39 42 45
apply(M, 2, mean) # priemery po stĺpcoch
[1] 11 14 17
Malé cvičenie
Vytvorte maticu 5x5 s hodnotami po riadkoch 1..25, vypočítajte
stĺpcové sumy a súčin matíc \(M^t
M\).
M <- matrix(1:25, nrow = 5, byrow = TRUE)
colSums(M2)
[1] 75 80 85 90 95
[,1] [,2] [,3] [,4] [,5]
[1,] 1375 1450 1525 1600 1675
[2,] 1450 1530 1610 1690 1770
[3,] 1525 1610 1695 1780 1865
[4,] 1600 1690 1780 1870 1960
[5,] 1675 1770 1865 1960 2055
LS0tCnRpdGxlOiAiWsOha2xhZG7DqSBvcGVyw6FjaWUgdiBSIgphdXRob3I6ICJEaWFuYSBIcnXFoW92c2vDoSAgPGJyPgoocyB2eXXFvml0w61tIENoYXRHUFQpIgpkYXRlOiAiU2VwdGVtYmVyIDIwMjUiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0aGVtZTogdW5pdGVkCiAgICBoaWdobGlnaHQ6IHRhbmdvCmVkaXRvcl9vcHRpb25zOiAKICBtYXJrZG93bjogCiAgICB3cmFwOiA3MgotLS0KCiMgTnVtZXJpY2vDqSB2ZWt0b3J5CgojIyBHZW5lcm92YW5pZSB2ZWt0b3JvdgoKYGBge3J9CnYxIDwtIGMoNSwgMTAsIDE1LCAyMCkgICAgICAgICAgICMgbm92w70gdmVrdG9yCnYyIDwtIDI6NiAgICAgICAgICAgICAgICAgICAgICAgICMgcG9zdHVwbm9zxaUgMiwzLDQsNSw2CnYzIDwtIHNlcShmcm9tID0gMC4xLCB0byA9IDEuMSwgYnkgPSAwLjI1KSAgIyBwb3N0dXBub3PFpSBzIGtyb2tvbSAwLjI1CnY0IDwtIHJlcCg3LCB0aW1lcyA9IDUpICAgICAgICAgICMgNyw3LDcsNyw3CnY1IDwtIHJ1bmlmKDUpICAgICAgICAgICAgICAgICAgICAjIG5vdsOpIG7DoWhvZG7DqSByb3Zub21lcm5lIHJvemRlbGVuw6kgaG9kbm90eQp2NiA8LSBybm9ybSg1KSAgICAgICAgICAgICAgICAgICAgIyBub3bDqSBuw6Fob2Ruw6kgbm9ybWFsbmUgcm96ZGVsZW7DqSBob2Rub3R5Cgp2MTsgdjI7IHYzOyB2NDsgdjU7IHY2CmBgYAoKIyMgQXJpdG1ldGlja8OpIG9wZXLDoWNpZSBzIHZla3Rvcm1pCgpgYGB7cn0KdiA8LSBjKDUsIDEwLCAxNSwgMjApCgp2ICsgNyAgICAgICAgICAjIGthxb5kw70gcHJ2b2sgdmVrdG9yYSB6dsOkxI3FocOtbWUgbyA3CnYgKiAzICAgICAgICAgICMga2HFvmTDvSBwcnZvayB2ZWt0b3JhIHZ5bsOhc29iw61tZSAzCih2ICsgMikgLyA0ICAgICMga2HFvmTDvSBwcnZvayB6dsO9xaFlbsO9IG8gMiBhIHBvdG9tIHZ5ZGVsZW7DvSA0CmV4cCh2KSAgICAgICAgICMgZXhwb25lbmNpw6FsbmEgZnVua2NpYSB6IGthxb5kw6lobyBwcnZrdSB2ZWt0b3JhCnN1bShjKDIsNCw2KSwgYygxLDEsMSkpICAgICAgICAgICMgc2thbMOhcm55IHPDusSNaW4gLSB2w71zbGVkb2sgamUgc2thbGFyCmNyb3NzcHJvZChjKDIsNCw2KSwgYygxLDEsMSkpICAgICMgc2thbMOhcm55IHPDusSNaW4gLSB2w71zbGVkb2sgamUgbWF0aWNhIDF4MQpjKDIsNCw2KSAqIGMoMSwyLDMpICAgICAgICAgICAgICAgIyBIYWRhbWFyZG92IHPDusSNaW4gKHPDusSNaW4gem9kcG92ZWRhasO6Y2ljaCBwcnZrb3YpCmBgYAoKIyMgTWF0ZW1hdGlja8OpIG9wZXLDoWNpZSBzIDIgdmVrdG9ybWkgcm92bmFrw6lobyByb3ptZXJ1CgpgYGB7cn0KIyBExLrFvmthIHZla3RvcmEKbGVuZ3RoKGMoMTAsIDIwLCAzMCwgNDAsIDUwKSkgIAoKIyBExLrFvmthIHZla3RvcmEgdjUgKG7DoWhvZG5lIGdlbmVyb3ZhbsO9KQpsZW5ndGgodjUpICAgICAgICAgICAgCgojIFPEjcOtdGFuaWUgZHZvY2ggdmVrdG9yb3Ygcm92bmFrZWogZMS6xb5reQpjKDEwLCAyMCwgMzAsIDQwLCA1MCkgKyB2NSAgICMgb2JhIHZla3RvcnkgbXVzaWEgbWHFpSByb3ZuYWvDvSByb3ptZXIKYGBgCgojIyBJbmRleG92YW5pZSBhIHbDvWJlciBuaWVrdG9yeWNoIHBydmtvdiB2ZWt0b3JhCgpgYGB7cn0KeCA8LSBjKDgsIDE1LCAyLCAxOSwgNiwgMSwgMjMpCnhbMV0gICAgICAgICAgICMgcHJ2w70gcHJ2b2sgdmVrdG9yYSB4CnhbMjo0XSAgICAgICAgICMgZHJ1aMO9IGHFviDFoXR2cnTDvSBwcnZvayB2ZWt0b3JhIHgKeFstMV0gICAgICAgICAgIyB2xaFldGt5IHBydmt5IG9rcmVtIHBydsOpaG8KeFt4ID4gMTJdICAgICAgIyB2xaFldGt5IHBydmt5IHbDpMSNxaFpZSBha28gMTIKd2hpY2goeCA+IDEyKSAgIyBpbmRleHkgcHJ2a292IHbDpMSNxaHDrWNoIGFrbyAxMgpgYGAKCiMjIFByw6FjYSBzIGNow71iYWrDumNpbWkgaG9kbm90YW1pCgpgYGB7cn0KeSA8LSBjKDIsIE5BLCA2LCBOQSwgMTApCgojIFppc3RlbmllLCBrdG9yw6kgcHJ2a3kgc8O6IE5BCmlzLm5hKHkpICAgICAgICAgICAgCgojIFByaWVtZXIgcyBOQSDihpIgdsO9c2xlZG9rIGplIE5BCm1lYW4oeSkgICAgICAgICAgICAgCgojIFByaWVtZXIgYmV6IE5BIOKGkiBOQSBzYSBpZ25vcnVqw7oKbWVhbih5LCBuYS5ybSA9IFRSVUUpCgpgYGAKCiMjIFrDoWtsYWRuw6kgxaF0YXRpc3Rpa3kgYSB1c3BvcmlhZGFuaWUgcHJ2a292IHZla3RvcmEgcG9kxL5hIHZlxL5rb3N0aQoKYGBge3J9CnogPC0gYyg3LCAxMiwgNCwgOSwgMTUpCm1lYW4oeikgICAgICAgICAgICAgICAgICMgcHJpZW1lcm7DoSBob2Rub3RhCnNkKHopICAgICAgICAgICAgICAgICAgICMgxaF0YW5kYXJkbsOhIG9kY2jDvWxrYQptYXgoeikgICAgICAgICAgICAgICAgICAjIG1heGltw6FsbmEgaG9kbm90YQpzdW1tYXJ5KHopICAgICAgICAgICAgICAjIHLDvWNobHkgcHJlaMS+YWQgesOha2xhZG7DvWNoIMWhdGF0aXN0w61rIG8gdmVrdG9yZQpzb3J0KHopICAgICAgICAgICAgICAgICAjIHJhc3TDumNlIHVzcG9yaWFkYW5pZQpzb3J0KHosIGRlY3JlYXNpbmcgPSBUUlVFKSAgIyBrbGVzYWrDumNlIHVzcG9yaWFkYW5pZQpgYGAKCiMjIE1hbMOpIGN2acSNZW5pZQoKPiBWeXR2b3J0ZSB2ZWt0b3IgYHdgIHMgxI3DrXNsYW1pIDEuLjIwIGEgdnlwb8SNw610YWp0ZSBzdW11IHbFoWV0a8O9Y2gKPiBww6FybnljaCDEjcOtc2VsLgoKYGBge3J9CncgPC0gNToyNSAgIyBub3bDvSB2ZWt0b3Igb2QgNSBkbyAyNQoKIyBTxI3DrXRhbmllIHDDoXJueWNoIMSNw61zZWwgdm8gdmVrdG9yZQpzdW0od1t3ICUlIDIgPT0gMF0pCgpgYGAKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBNYXRpY2UKCiMjIFZ5dHZvcmVuaWUgbWF0w61jCgpgYGB7cn0KIyBNYXRpY2EgemFkw6F2YW7DoSBwbyBzdMS6cGNvY2gKbSA8LSBtYXRyaXgoNToxNiwgbnJvdyA9IDMsIG5jb2wgPSA0KQoKIyBNYXRpY2EgemFkw6F2YW7DoSBwbyByaWFka29jaAptX2J5cm93IDwtIG1hdHJpeCg1OjE2LCBucm93ID0gMywgYnlyb3cgPSBUUlVFKQoKbQptX2J5cm93CgpgYGAKCiMjIFJvem1lcnkgbWF0aWNlCgpgYGB7cn0KIyBNYXRpY2EKbSA8LSBtYXRyaXgoNToxNiwgbnJvdyA9IDMsIG5jb2wgPSA0KQojIFJvem1lcnkgbWF0aWNlIChwb8SNZXQgcmlhZGtvdiBhIHN0xLpwY292KQpkaW0obSkKbQoKYGBgCgojIyBBZHJlc292YW5pZSBwcnZrb3YgbWF0aWNlCgpgYGB7cn0KIyBQcsOtc3R1cCBrIGplZG5vdGxpdsO9bSBwcnZrb20gYSBwb2RtYXRpY2lhbQptWzEsIDJdICAgICAgICMgcHJ2b2sgdiAxLiByaWFka3UgYSAyLiBzdMS6cGNpCm1bLCAzXSAgICAgICAgIyB2xaFldGt5IHBydmt5IHYgMy4gc3TEunBjaSAoM3gxKQptWzIsIF0gICAgICAgICMgdsWhZXRreSBwcnZreSB2IDIuIHJpYWRrdSAoMXg0KQptWzE6MiwgMjozXSAgICMgcG9kbWF0aWNhOiByaWFka3kgMSBhIDIsIHN0xLpwY2UgMiBhIDMKCmBgYAoKIyMgTWF0aWNvdsOpIG9wZXLDoWNpZQoKYGBge3J9CiMgRGVmaW7DrWNpYSBtYXTDrWMKQSA8LSBtYXRyaXgoYygyLCA0LCA2LCA4KSwgbnJvdyA9IDIpCkIgPC0gbWF0cml4KGMoMSwgMywgNSwgNyksIG5yb3cgPSAyKQoKIyBPcGVyw6FjaWUgcyBtYXRpY2FtaQpBICsgQiAgICAgICAgIyBzxI3DrXRhbmllIG1hdGljCkEgKiBCICAgICAgICAjIEhhZGFtYXJkb3Ygc8O6xI1pbiAocG8gcHJ2a29jaCkKQSAlKiUgQiAgICAgICMga2xhc2lja8OpIG7DoXNvYmVuaWUgbWF0aWMKdChBKSAgICAgICAgICMgdHJhbnNwb3rDrWNpYSBtYXRpY2UgQQpkZXQoQSkgICAgICAgIyBkZXRlcm1pbmFudCBtYXRpY2UgQQpzb2x2ZShBKSAgICAgIyBpbnZlcnppYSBtYXRpY2UgQSAoYWsgamUgcmVndWzDoXJuYSkKYGBgCgojIyBabHXEjW92YW5pZSB2ZWt0b3JvdiBkbyBtYXTDrWMKCmBgYHtyfQpDIDwtIGNiaW5kKDc6OSwgMTA6MTIpICAgIyAgLSBwbyBzdGxwY29jaCAKRCA8LSByYmluZCg3OjksIDEwOjEyKSAgICMgIC0gcG8gcmlhZGtvY2ggCkM7IEQKYGBgCgojIyBWeXBvxI3DrXRhbmllIHp2b2xlbmVqIMWhdGF0aXN0aWt5IHBvIHJpYWRrb2NoIChzdMS6cGNvY2gpIG1hdGljZQoKYGBge3J9Ck0gPC0gbWF0cml4KDEwOjE4LCBucm93ID0gMykKTQphcHBseShNLCAxLCBzdW0pICAgIyBzdW1hIHBvIHJpYWRrb2NoCmFwcGx5KE0sIDIsIG1lYW4pICAjIHByaWVtZXJ5IHBvIHN0xLpwY29jaApgYGAKCiMjIE1hbMOpIGN2acSNZW5pZQoKPiBWeXR2b3J0ZSBtYXRpY3UgNXg1IHMgaG9kbm90YW1pIHBvIHJpYWRrb2NoIDEuLjI1LCB2eXBvxI3DrXRhanRlCj4gc3TEunBjb3bDqSBzdW15IGEgc8O6xI1pbiBtYXTDrWMgJE1edCBNJC4KCmBgYHtyfQpNIDwtIG1hdHJpeCgxOjI1LCBucm93ID0gNSwgYnlyb3cgPSBUUlVFKQpjb2xTdW1zKE0yKQp0KE0yKSAlKiUgTTIKYGBgCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K