Základné typy objektov v R:

  1. Vektory

Rozlišujeme 4 typy vektorov: numerický vektor, vektor textových premenných, logický vektor a faktorový vektor

  1. Polia (arrays)

  2. Matice (dvojrozmerné polia)

Všetky prvky matice musia byť rovnakého typu.

  1. Faktory

Faktory sa používajú na reprezentáciu kategoriálnych dát.

  1. Listy (zoznamy)

List je súbor objektov rôznych typov.

  1. Dátové rámce (data frames)

Dátové rámce sú matice, v ktorých jednotlivé stĺpce môžu byť objekty rôzneho typu.

  1. Funkcie

Vektory

weight <- c(60, 72, 57, 90, 95, 72)
height <- c(1.75, 1.80, 1.65, 1.90, 1.74, 1.91)
bmi <- weight / height ^ 2
bmi
## [1] 19.59184 22.22222 20.93664 24.93075 31.37799 19.73630

Vektor textových premenných (character)

(names <- c("Andrea", "Beata", "Cyril", "Dana", "Emil", "Fero"))
## [1] "Andrea" "Beata"  "Cyril"  "Dana"   "Emil"   "Fero"

Vektor logických premenných (logical)

bmi > 25
## [1] FALSE FALSE FALSE FALSE  TRUE FALSE

Logické operátory: <, >, <=, >=, ==, !=, &, |, !

Faktorový vektor (factor)

fnames<-factor(names)
fnames

Operácie na vektoroch

length(weight) #dlzka 
## [1] 6
sum(weight) #sucet zloziek
## [1] 446
prod(weight) #sucin zloziek
## [1] 151585344000
sort(bmi) #zoradenie vzostupne
## [1] 19.59184 19.73630 20.93664 22.22222 24.93075 31.37799
rev(sort(bmi)) #zoradenie zostupne
## [1] 31.37799 24.93075 22.22222 20.93664 19.73630 19.59184
order(bmi) #vektor poradi
## [1] 1 6 3 2 4 5
rank(bmi) #poradie hodnot
## [1] 1 4 3 5 6 2
levels(fnames) #kategorie
## [1] "Andrea" "Beata"  "Cyril"  "Dana"   "Emil"   "Fero"

Úloha: Aký je rozdiel medzi order a rank? Kedy dajú rovnaký výstup?

Vytváranie vektorov

Vymenovaním prvkov: funkcia c()

x <- 1:20
y <- 20:1
z <- -15:15

n <- 10
1:n-1
##  [1] 0 1 2 3 4 5 6 7 8 9
1:(n-1)
## [1] 1 2 3 4 5 6 7 8 9

Príkaz seq

seq(from=4, to=10, by=2) 
seq(4, 10, length=4) 
seq(from = 5, by = 0.5, length = 25)

Príkaz rep

rep(1, 10)
rep(x, each = 3)

Matice

Vytvorenie matice vymenovaním prvkov a definovaním rozmerov:

A <- matrix( c(1,2,3,4,4,5,5,6,1), ncol=3, nrow=3, byrow=TRUE ) 
A2 <- matrix( c(1,2,3,4,4,5,5,6,1), ncol=3, nrow=6, byrow=TRUE ) 

Vytvorenie matice spojením vektorov do stĺpcov:

B <- cbind(1:4, 5:8, 9:12)

Vytvorenie matice spojením vektorov do riadkov:

C <- rbind(1:4, 5:8, 9:12) 

C[2,4] # prvok
C[ ,4] # stlpec
C[2, ] # riadok

z <- c(7,4,9)
A %*% z
t(z) %*% A
z %*% A

diag(6) # jednotkova diagonalna matica
diag(z) # na diagonale prvky vektora z
diag(A) # diagonala matice A

solve(A , c(2, 3, 4)) ## riesi system rovnic AX = b
sum(diag(A)) # stopa matice
det(A) # determinant matice
eigen(A) # vlastne hodnoty a vlastne vektory
prod(eigen(A)$values)

Zoznamy (Lists)

Zoznam (list) je súbor objektov rôznych typov

lst <- list(priezvisko="Pekny", meno = "Juraj", vek_deti = c(1, 4, 8))

Práca s listom:

length(lst) # pocet objektov
## [1] 3
names(lst) # nazvy objektov
## [1] "priezvisko" "meno"       "vek_deti"
lst$vek_deti # vyber jedneho objektu
## [1] 1 4 8
lst$vek_deti[2:3] <- c(1, 1) # editovanie objektu
lst$manzelka <- "Lucia" # pridanie objektu
lst[1]
## $priezvisko
## [1] "Pekny"
lst[[1]]
## [1] "Pekny"

Dátové rámce

Dátové rámce sú matice, v ktorých jednotlivé stĺpce môžu byť objekty rôzneho typu.

data(esoph)
head(esoph)
##   agegp     alcgp    tobgp ncases ncontrols
## 1 25-34 0-39g/day 0-9g/day      0        40
## 2 25-34 0-39g/day    10-19      0        10
## 3 25-34 0-39g/day    20-29      0         6
## 4 25-34 0-39g/day      30+      0         5
## 5 25-34     40-79 0-9g/day      0        27
## 6 25-34     40-79    10-19      0         7
attributes(esoph)# nazvy riadkov, stlpcov, trieda objektu (data frame)
## $names
## [1] "agegp"     "alcgp"     "tobgp"     "ncases"    "ncontrols"
## 
## $class
## [1] "data.frame"
## 
## $row.names
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
## [51] 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
## [76] 76 77 78 79 80 81 82 83 84 85 86 87 88
names(esoph)# nazvy premennych
## [1] "agegp"     "alcgp"     "tobgp"     "ncases"    "ncontrols"
esoph$ncases# hodnoty premennej ncases
##  [1]  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  1  0  0  0  3  1  0  0  0
## [26]  0  0  2  0  2  1  0  0  0  6  4  5  5  3  6  1  2  4  3  2  4  2  3  3  4
## [51]  9  6  4  3  9  8  3  4  5  6  2  5  5  4  2  0 17  3  5  6  4  2  1  3  1
## [76]  1  1  1  2  1  2  1  0  1  1  1  2  1
esoph[,4]
##  [1]  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  1  0  0  0  3  1  0  0  0
## [26]  0  0  2  0  2  1  0  0  0  6  4  5  5  3  6  1  2  4  3  2  4  2  3  3  4
## [51]  9  6  4  3  9  8  3  4  5  6  2  5  5  4  2  0 17  3  5  6  4  2  1  3  1
## [76]  1  1  1  2  1  2  1  0  1  1  1  2  1
esoph[1:10, 2:3]
##        alcgp    tobgp
## 1  0-39g/day 0-9g/day
## 2  0-39g/day    10-19
## 3  0-39g/day    20-29
## 4  0-39g/day      30+
## 5      40-79 0-9g/day
## 6      40-79    10-19
## 7      40-79    20-29
## 8      40-79      30+
## 9     80-119 0-9g/day
## 10    80-119    10-19
attach(esoph)# nacitanie nazvov premennych do pamate
ncases
##  [1]  0  0  0  0  0  0  0  0  0  0  0  0  1  0  0  0  1  0  0  0  3  1  0  0  0
## [26]  0  0  2  0  2  1  0  0  0  6  4  5  5  3  6  1  2  4  3  2  4  2  3  3  4
## [51]  9  6  4  3  9  8  3  4  5  6  2  5  5  4  2  0 17  3  5  6  4  2  1  3  1
## [76]  1  1  1  2  1  2  1  0  1  1  1  2  1
detach(esoph)# vylucenie nazvov premennych z pamate

Triedy objektov

Na identifikáciu, či zvolený objekt zodpovedá triede, ktorú požadujeme, slúžia funkcie “is.CLASS”, napr. is.numeric, is.character, is.matrix a pod.

is.numeric(esoph$ncontrols)
## [1] TRUE
is.character(esoph$agegp)
## [1] FALSE
is.matrix(esoph)
## [1] FALSE
is.data.frame(esoph)
## [1] TRUE

Na priradenie alebo zmenu triedy slúžia funkcie “class” resp. “as.CLASS”, napr. as.numeric, as.factor.

esoph2 <- as.matrix(esoph)

Inštalácia prídavných balíkov

R je rozšíriteľné pomocou balíkov (packages), z ktorých mnohé naprogramovali a dali verejne k dispozícii samotní používatelia R. Ich kompletný zoznam je na adrese: https://cran.r-project.org/web/packages/.

Každý takýto balík má svoju stránku, na ktorej sú základné informácie o ňom, manuály a zdrojové kódy. Napríklad balík TeachingDemos nájdeme na adrese: http://cran.r-project.org/web/packages/TeachingDemos/index.html

Samotné balíky môžeme inštalovať priamo z prostredia R. Postup je nasledovný:

V záložke “PACKAGES” -> install package(s) -> 1.krok zvolit CRAN, 2. krok zvoliť balík

V RStudio: button ‘Install’ v okne ‘Packages’

alebo:

install.packages("TeachingDemos")
library() # vypise vsetky dostupne nainstalovane balicky
library(TeachingDemos) # nacita konkretny balicek
library(help=TeachingDemos) # vypise vsetky funkcie a objekty balicka
search() # vypise ktore balicky su momentalne nacitane
faces(rbind(1:3,5:3,3:5,5:7))
faces(matrix(sample(1:1000,128,),16,8))

?mle.demo

Príklady na precvičenie

1.Vytvorte vektor \((2,\frac{2^2}{2},\frac{2^3}{3},\ldots,\frac{2^25}{25})\).

2*.Pozrite si help k funkcii ‘outer’ a pomocou nej vytvorte maticu \[ \begin{bmatrix} 0 & 1 &2&3&4\\1 &2&3&4&5\\2&3&4&5&6\\3&4&5&6&7\\4&5&6&7&8\end{bmatrix} \]

3.Napíšte príkaz, ktorý vyrieši sústavu rovníc \(x+2y+3z=0\\ 2x-3y-z=12\\ x-y=1\)