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:

z <- exp(1i * pi) + 1
z
[1] 0+1.224647e-16i
round(z, 15)
[1] 0+0i

Táto jednoduchá kontrola ukazuje, že matematické teórie majú pevný základ aj v reálnej výpočtovej praxi.

V nasledujúcom chunku si predstavíme zopár zaujímavých logických rovníc

a<-TRUE
b<-FALSE
c<- TRUE
a
[1] TRUE
b
[1] FALSE
c
[1] TRUE
x<-(a&b)|c
x
[1] TRUE
y<-(!a&!b)&c
y
[1] FALSE
xx<-(a|b)|!c
xx
[1] TRUE

Očakávali by ste takéto výsledky?

Malé cvičenie

Vypočítajte:

\[\frac{(15^2-4)}{7}\]

f<-(15^2 - 4) / 7
f
[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
substr(x, 8, 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
q<- v * 3 
q
[1] 15 12  9  6  3
r<- (v + 5) / 2
r
[1] 5.0 4.5 4.0 3.5 3.0
s<- exp(v)  
s
[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
tt<-c(4,3,3)*c(1,1,1)   
tt
[1] 4 3 3

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

length(c(5,6,8,9,11, 12))
[1] 6
length(v5)           
[1] 6
 c(5,6,8,9,11, 12)+ v5     
[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
x[1:3]         
[1] 10 15 13
x[-1]          
[1] 15 13  8  7  0  2
x[x > 12]      
[1] 15 13
which(x > 12)  
[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
mean(y)                 # NA
[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
sd(z)                  
[1] 5.176872
max(z)                  
[1] 15
summary(z)              
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    3.0     5.0     7.0     8.6    13.0    15.0 
sort(z)                
[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

dim(m)                   # (rows, cols)
[1] 3 5
m
     [,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

m[1, 2]      
[1] 4
m[ , 3]      
[1] 7 8 9
m[2, ]       
[1]  2  5  8 11 14
m[1:2, 2:3] 
     [,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
A * B        
     [,1] [,2]
[1,]    5   21
[2,]   12   32
A %*% B     
     [,1] [,2]
[1,]   23   31
[2,]   34   46
t(A)         
     [,1] [,2]
[1,]    1    2
[2,]    3    4
det(A)       
[1] -2
solve(A)    
     [,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
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

LS0tCnRpdGxlOiAiw5psb2hhIDIiCmF1dGhvcjogIk1pcm9zbGF2YSBNZWR2ZWNrw6EgIDxicj4gKHMgdnl1xb5pdMOtbSBDaGF0R1BUKSIKZGF0ZTogIlNlcHRlbWJlciAyMDI1IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0aGVtZTogdW5pdGVkCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogdHJ1ZQogICAgZGZfcHJpbnQ6IHBhZ2VkCmVkaXRvcl9vcHRpb25zOgogIG1hcmtkb3duOgogICAgd3JhcDogNzIKLS0tCgojIE1hdGVtYXRpY2vDqSBvcGVyw6FjaWUKCiMjIyAqUG96bsOhdGUgIm5hamtyYWrFoWl1IG1hdGVtYXRpY2vDuiByb3ZuaWN1Iio/CgpKZSDFiG91IEV1bGVyb3ZhIGlkZW50aXRhLCBrdG9yw6EgamUga3LDoXNueW0gc3BvamVuw61tIHRpZ29ub21ldHJpY2vDvWNoIGZ1bmtjacOtLCBleHBvbmVuY2nDoWxueWNoIGZ1bmtjacOtIGEga29tcGxleG7DvWNoIMSNw61zZWwuIFBvxI9tZSBzaSBqdSBwcmVkc3RhdmnFpTogCiQkZV57aVxwaX0gKyAxID0gMCQkCmtkZTogICAgIAoqZSogamUgZXhwb25lbmNpw6FsbmEgYsOhemEgICAgIAoqaSogamUgaW1hZ2luw6FybmEgamVkbm90a2EgICAgIAoqcGkqIGplIEx1ZG9sZm92byDEjcOtc2xvLiAgIAoKViBSIHNpIGp1IG3DtMW+ZW1lIG92ZXJpxaUgcG9tb2NvdSBrw7NkdTogCmBgYHtyfQp6IDwtIGV4cCgxaSAqIHBpKSArIDEKegpyb3VuZCh6LCAxNSkKYGBgCgpUw6F0byBqZWRub2R1Y2jDoSBrb250cm9sYSB1a2F6dWplLCDFvmUgbWF0ZW1hdGlja8OpIHRlw7NyaWUgbWFqw7ogcGV2bsO9IHrDoWtsYWQgYWogdiByZcOhbG5laiB2w71wb8SNdG92ZWogcHJheGkuCi0tLQoKIyMjIFYgbmFzbGVkdWrDumNvbSBjaHVua3Ugc2kgcHJlZHN0YXbDrW1lIHpvcMOhciB6YXVqw61tYXbDvWNoIGxvZ2lja8O9Y2ggcm92bsOtYwoKYGBge3Igc2V0dXAsIGluY2x1ZGU9VFJVRSxlY2hvPVRSVUV9CmE8LVRSVUUKYjwtRkFMU0UKYzwtIFRSVUUKYQpiCmMKeDwtKGEmYil8Ywp4Cnk8LSghYSYhYikmYwp5Cnh4PC0oYXxiKXwhYwp4eApgYGAKT8SNYWvDoXZhbGkgYnkgc3RlIHRha8OpdG8gdsO9c2xlZGt5PyAKLS0tCiMjIE1hbMOpIGN2acSNZW5pZQoKPiBWeXBvxI3DrXRhanRlOgoKJCRcZnJhY3soMTVeMi00KX17N30kJAoKYGBge3J9CmY8LSgxNV4yIC0gNCkgLyA3CmYKYGBgClbDvXNsZWRvayB0b2h0byBwcsOta2xhZHUgamU6IDMxLjU3MTQzLgotLS0KCiMjIFYgdG9tdG8gY2h1bmt1IHNhIHBvaHLDoW1lIHMgdGV4dG92w71taSBwcmVtZW5uw71taToKCmBgYHtyfQpmaXJzdCA8LSAiTWlyb3NsYXZhIiAgICAgICAgICAgICAgICAgICAgICAKbGFzdCAgPC0gIk1lZHZlY2vDoSIgICAgICAgICAgICAgICAgICAgICAgICAgCmZ1bGwgIDwtIHBhc3RlKGZpcnN0LCBsYXN0KQpmdWxsCmZ1bGxfbm9zcGFjZSA8LSBwYXN0ZTAoZmlyc3QsIGxhc3QpCmZ1bGxfbm9zcGFjZQpjc3ZfbGluZSA8LSBwYXN0ZSgicnXFvmEiLCAic2xuZcSNbmljYSIsICJob3J0ZW56aWEiLCBzZXAgPSAiLCIpCmNzdl9saW5lCmBgYAoKIyMgRMS6xb5rYSB0ZXh0b3bDqWhvIHJlxaVhemNhLCBwb2RyZcWlYXplYwoKYGBge3J9CnggPC0gIlByYWplbSBwZWtuw70gZGXFiCEiCm5jaGFyKHgpICAgICAgICAgICAgICAgICAKc3Vic3RyKHgsIDgsIDE3KSAgICAgICAgICAKYGBgCgotLS0KCiMjIFZla3RvcnkKCmBgYHtyfQp2MSA8LSBjKDUsIDQsIDMsIDIsIDEpCnYyIDwtIDE6NSAgICAgICAgICAgICAgICAgCnYzIDwtIHNlcShmcm9tID0gMCwgdG8gPSAxLCBieSA9IDAuMikKdjQgPC0gcmVwKDIsIHRpbWVzID0gNCkgICAKdjUgPC0gcnVuaWYoNikgICAgICAgICAgICAgCnY2IDwtIHJub3JtKDQpICAgICAgICAgCnYxOyB2MjsgdjM7IHY0OyB2NQpgYGAKCiMjIEFyaXRtZXRpY2vDqSBvcGVyw6FjaWUgcyB2ZWt0b3JtaQoKYGBge3J9CnYgPC0gYyg1LCA0LCAzLCAyLCAxKQpwPC0gdiArIDIwICAKcApxPC0gdiAqIDMgCnEKcjwtICh2ICsgNSkgLyAyCnIKczwtIGV4cCh2KSAgCnMKc3VtIDwtIHN1bShjKDQsMywzKSxjKDEsMSwxKSkgICAKc3VtCnQ8LSBjcm9zc3Byb2QoYyg0LDMsMyksYygxLDEsMSkpICAgCnQKdHQ8LWMoNCwzLDMpKmMoMSwxLDEpICAgCnR0CmBgYAoKIyMgTWF0ZW1hdGlja8OpIG9wZXLDoWNpZSBzIDIgdmVrdG9ybWkgcm92bmFrw6lobyByb3ptZXJ1CgpgYGB7cn0KbGVuZ3RoKGMoNSw2LDgsOSwxMSwgMTIpKQpsZW5ndGgodjUpICAgICAgICAgICAKIGMoNSw2LDgsOSwxMSwgMTIpKyB2NSAgICAgCmBgYAoKIyMgSW5kZXhvdmFuaWUgYSB2w71iZXIgbmlla3RvcnljaCBwcnZrb3YgdmVrdG9yYQoKYGBge3J9CnggPC0gYygxMCwgMTUsIDEzLCA4LCA3LCAwLCAyICkKeFsyXSAgICAgICAgICAgCnhbMTozXSAgICAgICAgIAp4Wy0xXSAgICAgICAgICAKeFt4ID4gMTJdICAgICAgCndoaWNoKHggPiAxMikgIApgYGAKCiMjIFByw6FjYSBzIGNow71iYWrDumNpbWkgaG9kbm90YW1pCgpgYGB7cn0KeSA8LSBjKDIsIE5BLCA0LCBOQSwgNikKaXMubmEoeSkKbWVhbih5KSAgICAgICAgICAgICAgICAgIyBOQQptZWFuKHksIG5hLnJtID0gVFJVRSkgICAjIHJlbW92ZSBOQXMKYGBgCgojIyBaw6FrbGFkbsOpIMWhdGF0aXN0aWt5IGEgdXNwb3JpYWRhbmllIHBydmtvdiB2ZWt0b3JhIHBvZMS+YSB2ZcS+a29zdGkKCmBgYHtyfQp6IDwtIGMoMTUsIDcsIDUsIDMsIDEzKQptZWFuKHopICAgICAgICAgICAgICAgIApzZCh6KSAgICAgICAgICAgICAgICAgIAptYXgoeikgICAgICAgICAgICAgICAgICAKc3VtbWFyeSh6KSAgICAgICAgICAgICAgCnNvcnQoeikgICAgICAgICAgICAgICAgCnNvcnQoeiwgZGVjcmVhc2luZyA9IFRSVUUpICAKYGBgCgojIyBNYWzDqSBjdmnEjWVuaWUKPiBWeXR2b3J0ZSB2ZWt0b3IgYHdgIHMgxI3DrXNsYW1pIDEuLjIwIGEgdnlwb8SNw610YWp0ZSBzdW11IHbFoWV0a8O9Y2ggcMOhcm55Y2ggxI3DrXNlbC4KCmBgYHtyfQp3IDwtIDE6MjAKc3VtKHdbdyAlJSAyID09IDBdKQpgYGAKU3VtYSB2xaFldGvDvWNoIHDDoXJueWNoIMSNw61zZWwgamUgMTEwCi0tLQoKIyMgTWF0aWNlCgpgYGB7cn0KbSA8LSBtYXRyaXgoMToxNSwgbnJvdyA9IDMsIG5jb2wgPSA1KSAgICAgICAgICAgCm1fYnlyb3cgPC0gbWF0cml4KDE6MTUsIG5yb3cgPSAzLCBieXJvdyA9IFRSVUUpICAKbTsgbV9ieXJvdwpgYGAKCiMjIFJvem1lcnkgbWF0aWNlCgpgYGB7cn0KZGltKG0pICAgICAgICAgICAgICAgICAgICMgKHJvd3MsIGNvbHMpCm0KYGBgCgojIyBBZHJlc292YW5pZSBwcnZrb3YgbWF0aWNlCgpgYGB7cn0KbVsxLCAyXSAgICAgIAptWyAsIDNdICAgICAgCm1bMiwgXSAgICAgICAKbVsxOjIsIDI6M10gCmBgYAoKIyMgTWF0aWNvdsOpIG9wZXLDoWNpZQoKYGBge3J9CkEgPC0gbWF0cml4KGMoMSwyLDMsNCksIG5yb3cgPSAyKQpCIDwtIG1hdHJpeChjKDUsNiw3LDgpLCBucm93ID0gMikKCkEgKyBCICAgICAgICAKQSAqIEIgICAgICAgIApBICUqJSBCICAgICAKdChBKSAgICAgICAgIApkZXQoQSkgICAgICAgCnNvbHZlKEEpICAgIApgYGAKCiMjIFpsdcSNb3ZhbmllIHZla3Rvcm92IGRvIG1hdMOtYyAKCmBgYHtyfQpDIDwtIGNiaW5kKDE6MywgNDo2KSAgICMgIC0gcG8gc3RscGNvY2ggCkQgPC0gcmJpbmQoMTozLCA0OjYpICAgIyAgLSBwbyByaWFka29jaCAKQzsgRApgYGAKCiMjIFZ5cG/EjcOtdGFuaWUgenZvbGVuZWogxaF0YXRpc3Rpa3kgcG8gcmlhZGtvY2ggKHN0xLpwY29jaCkgbWF0aWNlCgpgYGB7cn0KTSA8LSBtYXRyaXgoMTo5LCBucm93ID0gMykKTQphcHBseShNLCAxLCBzdW0pICAgIyBzdW1hIHBvIHJpYWRrb2NoCmFwcGx5KE0sIDIsIG1lYW4pICAjIHByaWVtZXJ5IHBvIHN0xLpwY29jaApgYGAKCiMjIE1hbMOpIGN2acSNZW5pZQoKPiBWeXR2b3J0ZSBtYXRpY3UgNXg1IHMgaG9kbm90YW1pIHBvIHJpYWRrb2NoIDEuLjI1LCB2eXBvxI3DrXRhanRlIHN0xLpwY292w6kgc3VteSBhIHPDusSNaW4gbWF0w61jIFwoTV50IE1cKS4KCmBgYHtyfQpNMiA8LSBtYXRyaXgoMToyNSwgbnJvdyA9IDUsIGJ5cm93ID0gVFJVRSkKY29sU3VtcyhNMikKdChNMikgJSolIE0yCmBgYAoKLS0tCgoKCgo=