Globálne nastavenie Chunkov

V nižšie uvedenom Chunku je urobené základné globálne nastavenie Chunkov v celom Notebooku.

  • echo nastavuje, či chceme v Notebooku vypisovať jednotlivé kódy R
  • message je nastavený na FALSE, čo znamená, že sa budú potláčať pracovné výstupy z R, t.j. napríklad výsledok otvárania knižníc, a niektoré iné výstupy, ktoré ale pre celkový Notebook nemajú takmer žiaden význam a sú vhodné skôr pri ladení kódov.
  • warning nastavený na FALSE potláča zobrazenie chybových hlášok
knitr::opts_chunk$set(
  echo = TRUE,
  message = FALSE,
  warning = FALSE
)

Úvod k základným operáciám v R

Tento notebook demonštruje základné operácie v jazyku R so:

  • skalárnymi číslami (t.j. 1 číslo),
  • textovými (znakovými) reťazcami,
  • logickými (boolovskými) hodnotami a premennými,
  • (numerickými) vektormi,
  • maticami.

Tam, kde je to užitočné, sú zahrnuté malé cvičenia.


Skaláre (jednočíselné hodnoty)

Numerické skaláre

# Priradenie konštanty do premennej
a <- 7
b <- 3.5

# Arithmetic
sum_ab      <- a + b        # sucet
diff_ab     <- a - b        # rozdiel
prod_ab     <- a * b        # násobenie
quot_ab     <- a / b        # delenie
power_ab    <- a ^ b        # umocňovanie
mod_ab      <- a %% 3       # zbytok po delení tromi (tzv modulo)


# Rounding
round_b   <- round(b)       # zaokruhlovanie smerom k najblizsiemu celemu cislu
ceil_b    <- ceiling(b)     # najblizsie vyssie cele cislo
floor_b   <- floor(b)       # najblizsie nizsie cele cislo

a; b
## [1] 7
## [1] 3.5
sum_ab; diff_ab; prod_ab; quot_ab; power_ab; mod_ab;
## [1] 10.5
## [1] 3.5
## [1] 24.5
## [1] 2
## [1] 907.4927
## [1] 1
round_b; ceil_b; floor_b
## [1] 4
## [1] 4
## [1] 3

Poznámky

  • ^ operátor umocňovania.
  • %% je modulo, teda zbytok po delení,
  • round(x, digits = 0) zaokrúhľovanie na určitý počet desatinných miest (digits=). ak digits = 0, potom ide o celočíselné zaokrúhľovanie

Malé cvičenie

Vypočítajte:

\[\sqrt{36} + 5^2\]

sqrt(36) + 5^2
## [1] 31

Vypočítajte:

\[\frac{(20+6)\times4}{8}\]

(20 + 6) * 4 / 8
## [1] 13

Text

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

first <- "Vladimir"                       # definovanie obsahu textovej premennej first
last  <- "Gazda"                          # definovanie obsahu text. premennej last
full  <- paste(first, last)               # spojenie dvoch text. premennych do jednej (s medzerou)
full_nospace <- paste0(first, last)       # spojenie bez medzery
csv_line <- paste("apple", "banana", "pear", sep = ",")  # spojenie textov s oddelovacom ,
first; last; full; full_nospace; csv_line   # bodkočiarka tu nahradzuje odskok na novy riadok 
## [1] "Vladimir"
## [1] "Gazda"
## [1] "Vladimir Gazda"
## [1] "VladimirGazda"
## [1] "apple,banana,pear"

Dĺžka textového reťazca, podreťazec

x <- "R is great!"
nchar(x)                 # počet znakov  v retazci "R is great!"
## [1] 11
substr(x, 1, 5)          # podreťazec od 1. do 5. znaku
## [1] "R is "

Tip: Knižnica stringr mnohé zaujímavé možnosti práce s textami, ale implicitné knižnice R pokrývajú väčšinu bežných potrieb páce s textami.


Logické (boolovské) hodnoty a premenné

Základy

p <- TRUE
q <- FALSE
!p                 # NOT
## [1] FALSE
p & q              # AND
## [1] FALSE
p | q              # OR
## [1] TRUE
xor(p, q)          # exclusive OR - platí len jedno z p,alebo q
## [1] TRUE

Logický výsledok porovnávania

3 < 5
## [1] TRUE
7 >= 7
## [1] TRUE
"cat" == "cat"
## [1] TRUE
"cat" != "dog"   # vykricnik je tu v zmysle negacie. Napr.:   !=, !>, !<, !TRUE
## [1] TRUE
!TRUE
## [1] FALSE

Zložitejšie logické operácie

x <- 10
x > 5 & x < 20      # a sucasne - logicky prienik (sucin)
## [1] TRUE
x < 0 | x > 100     # alebo - logicke zjednotenie (sucet)
## [1] FALSE
                    # pri zlozitejsich vztahoch pouzivajte zatvorky ()

Zlučovanie viacerých log. premenných do vektora

vals <- c(TRUE, FALSE, TRUE, TRUE)   # definicia vektora s logickymi hodnotami

Numerické vektory

Generovanie vektorov

v1 <- c(2, 4, 6, 8)
v2 <- 1:5                  # postupnost 1,2,3,4,5
v3 <- seq(from = 0, to = 1, by = 0.25)  # postupnost s krokom 0.25
v4 <- rep(3, times = 5)    # 3,3,3,3,3  # 5 clenna postupnost trojak
v5 <- runif(5)             # generovanie rovnomerne rozdelenych premennych v intervale [0,1]
v6 <- rnorm(5)             # generovanie normalne rozdelenych premennych
v1; v2; v3; v4; v5
## [1] 2 4 6 8
## [1] 1 2 3 4 5
## [1] 0.00 0.25 0.50 0.75 1.00
## [1] 3 3 3 3 3
## [1] 0.33662040 0.57651696 0.09173891 0.22956618 0.13054024

Aritmetické operácie s vektormi

v <- c(1, 2, 3, 4)
v + 10           # kazdy prvok vektora zvacsime o 10
## [1] 11 12 13 14
v * 2            # kazdy prvok vektora prenasobime 2
## [1] 2 4 6 8
(v + 1) / 2
## [1] 1.0 1.5 2.0 2.5
exp(v)           # exponencialna funkcia z kazdeho prvku vektora
## [1]  2.718282  7.389056 20.085537 54.598150
sum(c(1,2,3),c(1,1,1))          # skalarny sucin - vysledok je skalar
## [1] 9
crossprod(c(1,2,3),c(1,1,1))    # skalarny sucin - vysledok je matica 1x1
##      [,1]
## [1,]    6
c(1,2,3)*c(1,1,1)               # Hadamardov sucin (sucin zodpovedajucich prvkov vektora)
## [1] 1 2 3

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

length(c(1,2,3,4,5))
## [1] 5
length(v5)            #vektor v5 je definovany vyssie
## [1] 5
c(1,2,3,4,5) + v5     # pozor, oba vektory musia mat rovnaky rozmer
## [1] 1.336620 2.576517 3.091739 4.229566 5.130540

Indexovanie a výber niektorych prvkov vektora

x <- c(5, 12, 3, 18, 7, 0, 21)
x[1]           # indexovanie - novy jedno-prvkovy vektor - prvy prvok vektora x
## [1] 5
x[2:4]         # novy vektor s druhym az stvrtym prvkom vektora x
## [1] 12  3 18
x[-1]          # novy vektor - vsetky prvky vektora x okrem prvého
## [1] 12  3 18  7  0 21
x[x > 10]      # novy vektor definovany prvkami x vacsimi ako 10
## [1] 12 18 21
which(x > 10)  # ktore prvky zodpovedaju podmienke vacsieho ako 10?
## [1] 2 4 7

Práca s chýbajúcimi hodnotami

y <- c(1, NA, 3, NA, 5)
is.na(y)
## [1] FALSE  TRUE FALSE  TRUE FALSE
mean(y)                 # NA
## [1] NA
mean(y, na.rm = TRUE)   # remove NAs
## [1] 3

Základné štatistiky a usporiadanie prvkov vektora podľa veľkosti

z <- c(10, 3, 5, 8, 2)
mean(z)                 # priemerna hodnota
## [1] 5.6
sd(z)                  # standardna odchylka
## [1] 3.361547
max(z)                  # maximalna hodnota
## [1] 10
summary(z)              # rychly prehlad zakladnych statistik o vektore
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     2.0     3.0     5.0     5.6     8.0    10.0
sort(z)                 # rastuce usporiadanie 
## [1]  2  3  5  8 10
sort(z, decreasing = TRUE)  # klesajuce
## [1] 10  8  5  3  2

Malé cvičenie

Vytvorte vektor a vypočítajte jeho súčet.

v <- c(3, 7, 11, 5)
sum(v)
## [1] 26

Vytvorte vektor \(\mathbf{x} = (3,6,9,12,15,18)\). 1. Vypočítajte súčet všetkých hodnôt. 2. Zistite, ktoré hodnoty sú väčšie ako priemer vektora.

x <- c(3,6,9,12,15,18)

sum(x)
## [1] 63
x[x > mean(x)]
## [1] 12 15 18

Vypočítajte štandardnú odchýlku vektora.

v <- c(4,8,6,10,12)

sd(v)
## [1] 3.162278

Matice

Vytvorenie matíc

m <- matrix(1:12, nrow = 3, ncol = 4)            # hodnoty sú zadavane po stlpcoch
m_byrow <- matrix(1:12, nrow = 3, byrow = TRUE)  # hodnoty su zadavane po riadkoch
m; m_byrow
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12

Rozmery matice

dim(m)                   # (rows, cols)
## [1] 3 4
m
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

Adresovanie prvkov matice

m[1, 2]      # riadok 1, stlpec 2
## [1] 4
m[ , 3]      # vsetky prvky v tretom stlpci - vysledok matica 3x1
## [1] 7 8 9
m[2, ]       # vsetky prvky v druhom riadku - vysledok matica 1*3
## [1]  2  5  8 11
m[1:2, 2:3]  # podmatica tvorena riadkami 1, 2 a stlpcami 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        # scitanie matic
##      [,1] [,2]
## [1,]    6   10
## [2,]    8   12
A * B        # Hadamard product - nasobenie po zodpovedajucich prvkoch
##      [,1] [,2]
## [1,]    5   21
## [2,]   12   32
A %*% B      # nasobenie matic
##      [,1] [,2]
## [1,]   23   31
## [2,]   34   46
t(A)         # transpozicia matice A - vymena riadkov a stlpcov
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
det(A)       # determinant matice
## [1] -2
solve(A)     # inverzia matice (ak je matica regularna - teda inverzia sa da spocitat)
##      [,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
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6

Vypočítanie zvolenej štatistiky po riadkoch (stĺpcoch) matice

M <- matrix(1:9, nrow = 3)
M
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
apply(M, 1, sum)   # suma po riadkoch
## [1] 12 15 18
apply(M, 2, mean)  # priemery po stĺpcoch
## [1] 2 5 8

Malé cvičenie

Vytvorte maticu \(\mathbf{A}\) a vypočítajte súčet všetkých jej prvkov.

A <- matrix(c(2,4,6,8), nrow = 2)
sum(A)
## [1] 20

Vytvorte maticu \(\mathbf{B}\) s hodnotami 1 až 9 a vypočítajte jej transpozíciu.

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

Vytvorte maticu \(\mathbf{C}\) s hodnotami 1 až 9 usporiadanými do 3 riadkov. 1. Vypočítajte súčty jednotlivých riadkov. 2. Vypočítajte súčty jednotlivých stĺpcov.

C <- matrix(1:9, nrow=3)

rowSums(C)
## [1] 12 15 18
colSums(C)
## [1]  6 15 24

Môj návrh použitia novinky

V tejto sekcií som skúšala funkcie, ktoré neboli v pôvodnom dokumente

sample(1:20,5)                                #náhodný výber
## [1] 11  9 10  1 15
rowMeans(matrix(1:9,nrow=3))                  #priemer jednotlivých riadkov v matici
## [1] 4 5 6
diag(4)                                       #diagonálna matica
##      [,1] [,2] [,3] [,4]
## [1,]    1    0    0    0
## [2,]    0    1    0    0
## [3,]    0    0    1    0
## [4,]    0    0    0    1