Základné typy objektov v R:
Rozlišujeme 4 typy vektorov: numerický vektor, vektor textových premenných, logický vektor a faktorový vektor
Polia (arrays)
Matice (dvojrozmerné polia)
Všetky prvky matice musia byť rovnakého typu.
Faktory sa používajú na reprezentáciu kategoriálnych dát.
List je súbor objektov rôznych typov.
Dátové rámce sú matice, v ktorých jednotlivé stĺpce môžu byť objekty rôzneho typu.
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?
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)
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)
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 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
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)
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
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\)