Matematické operácie
Poznáte “najkrajšiu matematickú rovnicu”?
Je ňou Eulerova identita, ktorá je krásnym spojením tigonometrických
funkcií, exponenciálnych funkcií a komplexných čísel. Poďme si ju
predstaviť: \[e^{i\pi} + 1 = 0\]
kde:
e je exponenciálna báza
i je imaginárna jednotka
pi je Ludolfovo číslo.
V R si ju môžeme overiť pomocou kódu:
[1] 0+1.224647e-16i
[1] 0+0i
Táto jednoduchá kontrola ukazuje, že matematické teórie majú pevný
základ aj v reálnej výpočtovej praxi.
Očakávali by ste takéto výsledky?
Malé cvičenie
Vypočítajte:
\[\frac{(15^2-4)}{7}\]
[1] 31.57143
Výsledok tohto príkladu je: 31.57143.
V tomto chunku sa pohráme s textovými premennými:
first <- "Miroslava"
last <- "Medvecká"
full <- paste(first, last)
full
[1] "Miroslava Medvecká"
full_nospace <- paste0(first, last)
full_nospace
[1] "MiroslavaMedvecká"
csv_line <- paste("ruža", "slnečnica", "hortenzia", sep = ",")
csv_line
[1] "ruža,slnečnica,hortenzia"
Dĺžka textového reťazca, podreťazec
x <- "Prajem pekný deň!"
nchar(x)
[1] 17
[1] "pekný deň!"
Vektory
v1 <- c(5, 4, 3, 2, 1)
v2 <- 1:5
v3 <- seq(from = 0, to = 1, by = 0.2)
v4 <- rep(2, times = 4)
v5 <- runif(6)
v6 <- rnorm(4)
v1; v2; v3; v4; v5
[1] 5 4 3 2 1
[1] 1 2 3 4 5
[1] 0.0 0.2 0.4 0.6 0.8 1.0
[1] 2 2 2 2
[1] 0.9555456 0.7484804 0.6343071 0.9781731 0.5651916 0.8978082
Aritmetické operácie s vektormi
v <- c(5, 4, 3, 2, 1)
p<- v + 20
p
[1] 25 24 23 22 21
[1] 15 12 9 6 3
[1] 5.0 4.5 4.0 3.5 3.0
[1] 148.413159 54.598150 20.085537 7.389056 2.718282
sum <- sum(c(4,3,3),c(1,1,1))
sum
[1] 13
t<- crossprod(c(4,3,3),c(1,1,1))
t
[,1]
[1,] 10
[1] 4 3 3
Matematické operácie s 2 vektormi rovnakého rozmeru
length(c(5,6,8,9,11, 12))
[1] 6
[1] 6
[1] 5.955546 6.748480 8.634307 9.978173 11.565192 12.897808
Indexovanie a výber niektorych prvkov vektora
x <- c(10, 15, 13, 8, 7, 0, 2 )
x[2]
[1] 15
[1] 10 15 13
[1] 15 13 8 7 0 2
[1] 15 13
[1] 2 3
Práca s chýbajúcimi hodnotami
y <- c(2, NA, 4, NA, 6)
is.na(y)
[1] FALSE TRUE FALSE TRUE FALSE
[1] NA
mean(y, na.rm = TRUE) # remove NAs
[1] 4
Základné štatistiky a usporiadanie prvkov vektora podľa
veľkosti
z <- c(15, 7, 5, 3, 13)
mean(z)
[1] 8.6
[1] 5.176872
[1] 15
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.0 5.0 7.0 8.6 13.0 15.0
[1] 3 5 7 13 15
sort(z, decreasing = TRUE)
[1] 15 13 7 5 3
Malé cvičenie
Vytvorte vektor w
s číslami 1..20 a vypočítajte sumu
všetkých párnych čísel.
w <- 1:20
sum(w[w %% 2 == 0])
[1] 110
Suma všetkých párnych čísel je 110
Matice
m <- matrix(1:15, nrow = 3, ncol = 5)
m_byrow <- matrix(1:15, nrow = 3, byrow = TRUE)
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 13 14 15
Rozmery matice
[1] 3 5
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
Adresovanie prvkov matice
[1] 4
[1] 7 8 9
[1] 2 5 8 11 14
[,1] [,2]
[1,] 4 7
[2,] 5 8
Maticové operácie
A <- matrix(c(1,2,3,4), nrow = 2)
B <- matrix(c(5,6,7,8), nrow = 2)
A + B
[,1] [,2]
[1,] 6 10
[2,] 8 12
[,1] [,2]
[1,] 5 21
[2,] 12 32
[,1] [,2]
[1,] 23 31
[2,] 34 46
[,1] [,2]
[1,] 1 2
[2,] 3 4
[1] -2
[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5
Zlučovanie vektorov do matíc
C <- cbind(1:3, 4:6) # - po stlpcoch
D <- rbind(1:3, 4:6) # - po riadkoch
C; D
Vypočítanie zvolenej štatistiky po riadkoch (stĺpcoch) matice
M <- matrix(1:9, nrow = 3)
M
apply(M, 1, sum) # suma po riadkoch
apply(M, 2, mean) # priemery po stĺpcoch
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\).
M2 <- matrix(1:25, nrow = 5, byrow = TRUE)
colSums(M2)
[1] 55 60 65 70 75
[,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
LS0tCnRpdGxlOiAiw5psb2hhIDIiCmF1dGhvcjogIk1pcm9zbGF2YSBNZWR2ZWNrw6EgIDxicj4gKHMgdnl1xb5pdMOtbSBDaGF0R1BUKSIKZGF0ZTogIlNlcHRlbWJlciAyMDI1IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0aGVtZTogdW5pdGVkCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgZGZfcHJpbnQ6IHBhZ2VkCmVkaXRvcl9vcHRpb25zOgogIG1hcmtkb3duOgogICAgd3JhcDogNzIKLS0tCgojIE1hdGVtYXRpY2vDqSBvcGVyw6FjaWUKCiMjIyAqUG96bsOhdGUgIm5hamtyYWrFoWl1IG1hdGVtYXRpY2vDuiByb3ZuaWN1Iio/CgpKZSDFiG91IEV1bGVyb3ZhIGlkZW50aXRhLCBrdG9yw6EgamUga3LDoXNueW0gc3BvamVuw61tIHRpZ29ub21ldHJpY2vDvWNoIGZ1bmtjacOtLCBleHBvbmVuY2nDoWxueWNoIGZ1bmtjacOtIGEga29tcGxleG7DvWNoIMSNw61zZWwuIFBvxI9tZSBzaSBqdSBwcmVkc3RhdmnFpTogCiQkZV57aVxwaX0gKyAxID0gMCQkCmtkZTogICAgIAoqZSogamUgZXhwb25lbmNpw6FsbmEgYsOhemEgICAgIAoqaSogamUgaW1hZ2luw6FybmEgamVkbm90a2EgICAgIAoqcGkqIGplIEx1ZG9sZm92byDEjcOtc2xvLiAgIAoKViBSIHNpIGp1IG3DtMW+ZW1lIG92ZXJpxaUgcG9tb2NvdSBrw7NkdTogCmBgYHtyfQp6IDwtIGV4cCgxaSAqIHBpKSArIDEKegpyb3VuZCh6LCAxNSkKYGBgCgpUw6F0byBqZWRub2R1Y2jDoSBrb250cm9sYSB1a2F6dWplLCDFvmUgbWF0ZW1hdGlja8OpIHRlw7NyaWUgbWFqw7ogcGV2bsO9IHrDoWtsYWQgYWogdiByZcOhbG5laiB2w71wb8SNdG92ZWogcHJheGkuCi0tLQoKIyMjIFYgbmFzbGVkdWrDumNvbSBjaHVua3Ugc2kgcHJlZHN0YXbDrW1lIHpvcMOhciB6YXVqw61tYXbDvWNoIGxvZ2lja8O9Y2ggcm92bsOtYwoKYGBge3Igc2V0dXAsIGluY2x1ZGU9VFJVRSxlY2hvPVRSVUV9CmE8LVRSVUUKYjwtRkFMU0UKYzwtIFRSVUUKYQpiCmMKeDwtKGEmYil8Ywp4Cnk8LSghYSYhYikmYwp5Cnh4PC0oYXxiKXwhYwp4eApgYGAKT8SNYWvDoXZhbGkgYnkgc3RlIHRha8OpdG8gdsO9c2xlZGt5PyAKLS0tCiMjIE1hbMOpIGN2acSNZW5pZQoKPiBWeXBvxI3DrXRhanRlOgoKJCRcZnJhY3soMTVeMi00KX17N30kJAoKYGBge3J9CmY8LSgxNV4yIC0gNCkgLyA3CmYKYGBgClbDvXNsZWRvayB0b2h0byBwcsOta2xhZHUgamU6IDMxLjU3MTQzLgotLS0KCiMjIFYgdG9tdG8gY2h1bmt1IHNhIHBvaHLDoW1lIHMgdGV4dG92w71taSBwcmVtZW5uw71taToKCmBgYHtyfQpmaXJzdCA8LSAiTWlyb3NsYXZhIiAgICAgICAgICAgICAgICAgICAgICAKbGFzdCAgPC0gIk1lZHZlY2vDoSIgICAgICAgICAgICAgICAgICAgICAgICAgCmZ1bGwgIDwtIHBhc3RlKGZpcnN0LCBsYXN0KQpmdWxsCmZ1bGxfbm9zcGFjZSA8LSBwYXN0ZTAoZmlyc3QsIGxhc3QpCmZ1bGxfbm9zcGFjZQpjc3ZfbGluZSA8LSBwYXN0ZSgicnXFvmEiLCAic2xuZcSNbmljYSIsICJob3J0ZW56aWEiLCBzZXAgPSAiLCIpCmNzdl9saW5lCmBgYAoKIyMgRMS6xb5rYSB0ZXh0b3bDqWhvIHJlxaVhemNhLCBwb2RyZcWlYXplYwoKYGBge3J9CnggPC0gIlByYWplbSBwZWtuw70gZGXFiCEiCm5jaGFyKHgpICAgICAgICAgICAgICAgICAKc3Vic3RyKHgsIDgsIDE3KSAgICAgICAgICAKYGBgCgotLS0KCiMjIFZla3RvcnkKCmBgYHtyfQp2MSA8LSBjKDUsIDQsIDMsIDIsIDEpCnYyIDwtIDE6NSAgICAgICAgICAgICAgICAgCnYzIDwtIHNlcShmcm9tID0gMCwgdG8gPSAxLCBieSA9IDAuMikKdjQgPC0gcmVwKDIsIHRpbWVzID0gNCkgICAKdjUgPC0gcnVuaWYoNikgICAgICAgICAgICAgCnY2IDwtIHJub3JtKDQpICAgICAgICAgCnYxOyB2MjsgdjM7IHY0OyB2NQpgYGAKCiMjIEFyaXRtZXRpY2vDqSBvcGVyw6FjaWUgcyB2ZWt0b3JtaQoKYGBge3J9CnYgPC0gYyg1LCA0LCAzLCAyLCAxKQpwPC0gdiArIDIwICAKcApxPC0gdiAqIDMgCnEKcjwtICh2ICsgNSkgLyAyCnIKczwtIGV4cCh2KSAgCnMKc3VtIDwtIHN1bShjKDQsMywzKSxjKDEsMSwxKSkgICAKc3VtCnQ8LSBjcm9zc3Byb2QoYyg0LDMsMyksYygxLDEsMSkpICAgCnQKdHQ8LWMoNCwzLDMpKmMoMSwxLDEpICAgCnR0CmBgYAoKIyMgTWF0ZW1hdGlja8OpIG9wZXLDoWNpZSBzIDIgdmVrdG9ybWkgcm92bmFrw6lobyByb3ptZXJ1CgpgYGB7cn0KbGVuZ3RoKGMoNSw2LDgsOSwxMSwgMTIpKQpsZW5ndGgodjUpICAgICAgICAgICAKIGMoNSw2LDgsOSwxMSwgMTIpKyB2NSAgICAgCmBgYAoKIyMgSW5kZXhvdmFuaWUgYSB2w71iZXIgbmlla3RvcnljaCBwcnZrb3YgdmVrdG9yYQoKYGBge3J9CnggPC0gYygxMCwgMTUsIDEzLCA4LCA3LCAwLCAyICkKeFsyXSAgICAgICAgICAgCnhbMTozXSAgICAgICAgIAp4Wy0xXSAgICAgICAgICAKeFt4ID4gMTJdICAgICAgCndoaWNoKHggPiAxMikgIApgYGAKCiMjIFByw6FjYSBzIGNow71iYWrDumNpbWkgaG9kbm90YW1pCgpgYGB7cn0KeSA8LSBjKDIsIE5BLCA0LCBOQSwgNikKaXMubmEoeSkKbWVhbih5KSAgICAgICAgICAgICAgICAgIyBOQQptZWFuKHksIG5hLnJtID0gVFJVRSkgICAjIHJlbW92ZSBOQXMKYGBgCgojIyBaw6FrbGFkbsOpIMWhdGF0aXN0aWt5IGEgdXNwb3JpYWRhbmllIHBydmtvdiB2ZWt0b3JhIHBvZMS+YSB2ZcS+a29zdGkKCmBgYHtyfQp6IDwtIGMoMTUsIDcsIDUsIDMsIDEzKQptZWFuKHopICAgICAgICAgICAgICAgIApzZCh6KSAgICAgICAgICAgICAgICAgIAptYXgoeikgICAgICAgICAgICAgICAgICAKc3VtbWFyeSh6KSAgICAgICAgICAgICAgCnNvcnQoeikgICAgICAgICAgICAgICAgCnNvcnQoeiwgZGVjcmVhc2luZyA9IFRSVUUpICAKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUKPiBWeXR2b3J0ZSB2ZWt0b3IgYHdgIHMgxI3DrXNsYW1pIDEuLjIwIGEgdnlwb8SNw610YWp0ZSBzdW11IHbFoWV0a8O9Y2ggcMOhcm55Y2ggxI3DrXNlbC4KCmBgYHtyfQp3IDwtIDE6MjAKc3VtKHdbdyAlJSAyID09IDBdKQpgYGAKU3VtYSB2xaFldGvDvWNoIHDDoXJueWNoIMSNw61zZWwgamUgMTEwCi0tLQoKIyMgTWF0aWNlCgpgYGB7cn0KbSA8LSBtYXRyaXgoMToxNSwgbnJvdyA9IDMsIG5jb2wgPSA1KSAgICAgICAgICAgCm1fYnlyb3cgPC0gbWF0cml4KDE6MTUsIG5yb3cgPSAzLCBieXJvdyA9IFRSVUUpICAKbTsgbV9ieXJvdwpgYGAKCiMjIFJvem1lcnkgbWF0aWNlCgpgYGB7cn0KZGltKG0pICAgICAgICAgICAgICAgICAgICMgKHJvd3MsIGNvbHMpCm0KYGBgCgojIyBBZHJlc292YW5pZSBwcnZrb3YgbWF0aWNlCgpgYGB7cn0KbVsxLCAyXSAgICAgIAptWyAsIDNdICAgICAgCm1bMiwgXSAgICAgICAKbVsxOjIsIDI6M10gCmBgYAoKIyMgTWF0aWNvdsOpIG9wZXLDoWNpZQoKYGBge3J9CkEgPC0gbWF0cml4KGMoMSwyLDMsNCksIG5yb3cgPSAyKQpCIDwtIG1hdHJpeChjKDUsNiw3LDgpLCBucm93ID0gMikKCkEgKyBCICAgICAgICAKQSAqIEIgICAgICAgIApBICUqJSBCICAgICAKdChBKSAgICAgICAgIApkZXQoQSkgICAgICAgCnNvbHZlKEEpICAgIApgYGAKCiMjIFpsdcSNb3ZhbmllIHZla3Rvcm92IGRvIG1hdMOtYyAKCmBgYHtyfQpDIDwtIGNiaW5kKDE6MywgNDo2KSAgICMgIC0gcG8gc3RscGNvY2ggCkQgPC0gcmJpbmQoMTozLCA0OjYpICAgIyAgLSBwbyByaWFka29jaCAKQzsgRApgYGAKCiMjIFZ5cG/EjcOtdGFuaWUgenZvbGVuZWogxaF0YXRpc3Rpa3kgcG8gcmlhZGtvY2ggKHN0xLpwY29jaCkgbWF0aWNlCgpgYGB7cn0KTSA8LSBtYXRyaXgoMTo5LCBucm93ID0gMykKTQphcHBseShNLCAxLCBzdW0pICAgIyBzdW1hIHBvIHJpYWRrb2NoCmFwcGx5KE0sIDIsIG1lYW4pICAjIHByaWVtZXJ5IHBvIHN0xLpwY29jaApgYGAKCiMjIE1hbMOpIGN2acSNZW5pZQoKPiBWeXR2b3J0ZSBtYXRpY3UgNXg1IHMgaG9kbm90YW1pIHBvIHJpYWRrb2NoIDEuLjI1LCB2eXBvxI3DrXRhanRlIHN0xLpwY292w6kgc3VteSBhIHPDusSNaW4gbWF0w61jIFwoTV50IE1cKS4KCmBgYHtyfQpNMiA8LSBtYXRyaXgoMToyNSwgbnJvdyA9IDUsIGJ5cm93ID0gVFJVRSkKY29sU3VtcyhNMikKdChNMikgJSolIE0yCmBgYAoKLS0tCgoKCgo=