Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné...
Transcript of Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné...
PROGRAMOVANIE V JAZYKU R
poznámky k predná²kam a zbierka príkladov
Lenka Filová, KAM�, FMFI UK
28. februára 2020
Obsah
1 Úvod 21.1 In²talácia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Menu a help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.3 Práca s objektami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.4 Zásady písania vlastných funkcií . . . . . . . . . . . . . . . . . . . . . . . 31.5 In²talácia prídavných balíkov . . . . . . . . . . . . . . . . . . . . . . . . . 31.6 Prostredie RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Základné matematické operácie 4
3 Typy objektov 63.1 Vektory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4 Práca s dátovými súbormi 8
5 Riadenie toku 10
6 Funkcie 11
7 Práca s maticami a vektormi 137.1 Funkcie *apply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137.2 Cvi£enia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
8 Rekurzia 16
9 Optimalizácia 17
10 Rozdelenia pravdepodobnosti 1810.1 Cvi£enia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
11 Vizualizácia dát a gra�ka 2011.1 Základné gra�cké prostredie . . . . . . . . . . . . . . . . . . . . . . . . . . 2011.2 Trojrozmerná gra�ka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2211.3 Cvi£enia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
12 R Markdown 2312.1 Základné príkazy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2312.2 Pridávanie R a LaTeX kódu . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1
Kapitola 1
Úvod
1.1 In²talácia
Web stránka a základné prostredie:www.r-project.org
IDE prostredie:https://www.rstudio.com/products/RStudio/
1.2 Menu a help
• ?solve alebo help(function) otvorí dokumentáciu k danej funkcii.
• apropos("solve") nájde v²etky funkcie obsahujúce dané slovo.
• example(solve) spustí príklady k funkcii solve.
• help.search("solve") pouºijeme, ak nepoznáme presný názov funkcie: preh©adávahelp alebo ??function.
• RSiteSearch('regression', restrict='functions', matchesPerPage=100)
• help.start() spustí lokálne html prostredie pre help.
• sessionInfo() vypí²e informácie o aktuálnej verzii R a nain²talovaných balí£koch.
1.3 Práca s objektami
• ls() vypí²e v²etky objekty, ktoré sa pri ukon£ení R uloºia do súboru '.RData'.
• rm(obj1, obj2, ...) slúºi na odstra¬ovanie objektov.rm(list = ls()) vymaºe v²etky objekty (bez ¤al²ieho varovania!).
• class(object) vypí²e typ objektu.
• summary(object) je generická funkcia pre súhrnné informácie o rôznych typochobjektov.
• gc() (garbage collection) niekedy uºito£né na uvo©nenie pamäte po vymazaní ve©-kých objektov.
• .Last.value vypí²e hodnotu posledného vy£íslovaného výrazu.
2
• dir() vypí²e obsah aktuálneho adresára.
• getwd() vypí²e aktuálny adresár.
• setwd("/home/user") zmena aktuálneho adresára.
• q() ukon£enie R.
1.4 Zásady písania vlastných funkcií
1. Názvy súborov by mali by´ zmysluplné a ma´ príponu .R.
2. Názvy objektov by nemali by´ rovnaké ako názvy uº existujúcich funkcií v R.
3. Pred a za operátormi (=, +, -, <-, etc.) treba da´ medzeru.
4. �avá ku£eravá zátvorka sa nepí²e na nový riadok, ale za ¬ou nasleduje nový riadok.Naopak, pravú ku£eravú zátvorku pí²eme na nový riadok a ni£ uº za ¬ou nenasleduje(výnimkou je else). Príkazy vnútri ku£eravých zátvoriek treba odsadi´.
5. Jeden riadok by nemal ma´ viac ako 80 znakov.
6. Na odsadenie príkazov pouºívajte dve medzery.
7. Na priradenie pouºívajte <-, nie =.
8. Nezabúdajte do svojich programov napísa´ dostato£né mnoºstvo komentárov.
1.5 In²talácia prídavných balíkov
R je roz²írite©né pomocou balíkov (packages), z ktorých mnohé naprogramovali a daliverejne 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álya 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íkalebo:
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))
1.6 Prostredie RStudio
RStudio nám dáva moºnos´ ma´ spolu pokope v²etky súbory spojené s projektom: vstupnédáta, skripty, výsledky, obrázky. Nový projekt môºeme vytvori´ cez Click File > New Pro-
ject. Po vytvorení projektu sa R nachádza v jeho adresári (skontrolujte to cez getwd())a sem bude uklada´ v²etky výstupy a snaºi´ sa odtia© otvori´ súbory, ktoré nebudú ma´napísanú kompletnú cestu. Ke¤ re²tarujete RStudio, s adresári projektu sa bude nachá-dza´ súbor .Rproj. Jeho otvorením dostaneme RStudio do stavu, v ktorom bolo predzatvorením: dostaneme sa k objektom, histórii príkazov a sme v rovnakom adresári.
3
Kapitola 2
Základné matematické operácie
# +, -, *, /, ^
# sqrt(), abs(), choose(n, k)
# sin(), cos(), tan(), asin(), acos(), atan()
# exp()
# log(number, base=number)
# log10(number) - dekadicky
e
pi
1:10
diag(3)
# round(number, digits = pocet.miest)
round(pi, 2)
round(0.5 + (-2:4))
Základná syntaxobject <- function(arguments)
var <- 12
var
# alebo
( var <- 12 )
var2 <- "a"
var3 <- "slovo"
"a" -> var3
var*var
var*var2
Na názvy premenných sa môºu pouºíva´ písmená, £íslice, bodka, pod£iarkovník. Ne-smie sa za£ína´ £íslom. R je case sensitive.
v <- c( 2 , 3.1 , 5.4 )
v
v+5
sqrt(v)
A <- matrix( c(1,2,3,4,4,5,5,6,1), ncol=3, nrow=3, byrow=TRUE )
dim(A) # rozmery matice
length(B) # pocet prvkov matice
4
t(A) # transpozicia matice
A %*% A # nasobenie matic
A * A # nasobenie po prvkoch
solve(A) # inverzia matice
A %*% solve(A)
5
Kapitola 3
Typy objektov
Základné typy objektov v R:
• vektoryRozli²ujeme 4 typy vektorov: numerický vektor, vektor textových premenných, lo-gický vektor a faktorový vektor
• polia (arrays)
• matice (dvojrozmerné polia)V²etky prvky matice musia by´ rovnakého typu.
• faktoryFaktory sa pouºívajú na reprezentáciu kategoriálnych dát.
• listyList je súbor objektov rôznych typov.
• dátové rámceDátové rámce sú matice, v ktorých jednotlivé st¨pce môºu by´ objekty rôzneho typu.
• funkcie
3.1 Vektory
Príklad 3.1. Vytvorte vektory
• (0.110.225, 0.120.224, . . . , 0.1250.21),
• (2, 22
2 ,23
3 , . . . ,22525 ),
• vektor s hodnotami excos(x) pre x = 4, 4.2, . . . , 8.
Príklad 3.2. Vypo£ítajte
•∑300
i=1(i2 + 2/i)
•∑100
i=1(i3 + 4sin(x))
•∑50
i=1( 2i
i2 + 3i
i3 )
• (∑100
i=1 i)2 −
∑100i=1 i
2
• 1 + 23 + 2
345 + 2
34567 + . . .+ 2
345 · · ·
4041 .
6
Príklad 3.3. Vytvorte maticu M s 12 rovnakými riadkami (1,-3,4,2). Vypo£ítajte M ′M .Vypo£ítajte sú£et najv䣲ej a najmen²ej vlastnej hodnoty M ′M .
Príklad 3.4. Uvaºujme vektor 1:n, kde n je prirodzené £íslo. Napí²te príkaz, ktorý ur£í,ko©ko prvkov vektora je delite©ných tromi.
Príklad 3.5. Pomocou funkcií rep a : vytvorte vektory
• (1,1,1,2,2,2,...,10,10,10)
• (1,2,...,10,1,2,...10,1,2,...,10)
• (4,6,3,4,6,3,...,4,6,3), kde sa trojica 4,6,3 zopakuje 10-krát.
• (4,4,...,4,6,6...,6,3,3,...,3), kde sa 4 zopakuje 10-krát, 6 sa zopakuje 15-krát a 3 sazopakuje 8-krát
Príklad 3.6. Pomocou funkcie sample vytvorte dva vektory x = (x1, . . . , xn) a y =(y1, . . . , yn) d¨ºky n = 100, ktorých prvkami budú náhodné prirodzené £ísla z (0,1,2,...,999)(napríklad ako sample(0:999,100,replace=FALSE)).
• Vytvorte vektor (y2 − x1, y3 − x2, . . . , yn − xn−1).
• Vytvorte vektor (sin y1cosx2
, . . . ,sin yn−1cosxn
).
• Vytvorte vektor (2x1 + x2x3, 2x2 + x3x4, . . . , 2xn−2 + xn−1xn).
• Vypí²te v²etky prvky y, ktoré sú v䣲ie ako 500.
• Vypí²te indexy v²etkých prvkov y, ktoré sú v䣲ie ako 500.
• Vypí²te tie prvky x, ktoré zodpovedajú prvkom y v䣲ím ako 500.
• Nájdite najv䣲í prvok y a vypí²te v²etky prvky y, ktoré sa od neho lí²ia najviac o100.
• Vypí²te indexy v²etkých párnych prvkov x.
• Zora¤te prvky vektora x tak, aby jeho indexy zodpovedali zoradeniu vektora y odnajmen²ieho prvku po najv䣲í.
7
Kapitola 4
Práca s dátovými súbormi
Príklad 4.1. Nech x <- c(NA,3,33,6,7,9,NA,23,NA,11,NA,22,NA,NA,12,4). Napí²tepríkaz, ktorý
• Spo£íta, ko©ko chýbajúcich hodnôt je vo vektore.
• Vráti indexy zodpovedajúce chýbajúcim hodnotám v x.
• V²etky chýbajúce hodnoty nahradí £íslom 0.
• Vymaºe v²etky chýbajúce hodnoty.
• Vráti logický vektor, ktorý bude ma´ prvky s hodnotou TRUE na mieste chýbajúcichhodnôt a inde FALSE.
Príklad 4.2. Pomocou príkazu scan na£ítajte súbor ako
• vektor d¨ºky 20
• maticu s 20 riadkami
• maticu s 10 riadkami a 2 st¨pcami
Príklad 4.3. Vytvorte jednoduchý dátový rámec typu 10× 4. Usporiadajte jeho poloºkypod©a ve©kosti prvej premennej.
Príklad 4.4. Na£ítajte do premennej seishu dátahttp://www.iam.fmph.uniba.sk/ospm/Filova/vsa/Seishu.txt, ktoré popisujú výsledkytestov japonského vína.
1. Vytvorte dátový rámec seishu2, ktorý bude obsahova´ len premenné y1 a x1.
2. Zo seishu2 vymaºte v²etky riadky, v ktorých premenná y1 nadobúda zápornú hod-notu
3. Ur£te koe�cienty priamky, ktorá vznikne �tovaním lineárneho modelu závislosti y1od x1 v seishu2 metódou najmen²ích ²tvorcov.
Príklad 4.5. Na£ítajte dáta VADeaths (dostupné priamo v R).
• Presved£te sa, £i je VADeaths typu data.frame a ak nie, skonvertujte ho.
• Vytvorte novú premennú sucet a zapí²te do nej sú£ty jednotlivých riadkov súboru.
• Zme¬te poradie premenných tak, aby sucet bol prvý st¨pec.
8
• Usporiadajte riadky zostupne pod©a hodnoty premennej sucet.
Príklad 4.6. Na£ítajte dáta swiss (dostupné priamo v R).
• Vypí²te tie riadky, pre ktoré je hodnota premennej Fertility vy²²ia ako 70.
• Usporiadajte súbor pod©a hodnôt premennej Agriculture.
• Vypí²te tie riadky, pre ktoré je hodnota premennej Infant.Mortality vy²²ia ako20 a zárove¬ hodnota premennej Catholic niº²ia ako 10.
• Ur£te koe�cienty priamky, ktorá vznikne �tovaním lineárneho modelu závislostiInfant.Mortality od Education metódou najmen²ích ²tvorcov.
• Vytvorte premennú Relig, ktorá bude nadobúda´ hodnotu 0, ak Catholic je menejako 10, hodnotu 1, ak Catholic je medzi 10 a 30 a hodnotu 2 pre Catholic nad 30.
9
Kapitola 5
Riadenie toku
Príklad 5.1. Vypo£ítajte 12 + 22 + 32 + . . .+ 4002.
Príklad 5.2. Vypo£ítajte 1 ∗ 2 + 2 ∗ 3 + 3 ∗ 4 + . . .+ 249 ∗ 250.
Príklad 5.3. Bez pouºitia funkcie factorial vypo£ítajte 10!.
Príklad 5.4. Napí²te skript, ktorý vypo£íta 1 + 1/1! + 1/2! + 1/3! + . . . + 1/10! a pokaºdom pripo£ítaní vypí²e priebeºný sú£et.
Príklad 5.5. Nájdite sú£et párnych £lenov Fibonacciho postupnosti, ktoré sú men²ie ako4 milióny.
Príklad 5.6. Pomocou cyklu vytvorte nasledovnú maticu typu 5x5:0 1 2 3 41 0 1 2 32 1 0 1 23 2 1 0 14 3 2 1 0
Príklad 5.7. Nájdite sú£et v²etkých násobkov 3 a 5, ktoré sú men²ie ako 1000.
Príklad 5.8. Napí²te program, ktorý vypo£íta 1 + 2 + . . .+ 300 a po kaºdom dvadsiatoms£ítanci vypí²e medzisú£et.
Príklad 5.9. Vypo£ítajte
•20∑i=1
5∑j=1
i3
2 + 3j
•20∑i=1
5∑j=1
i3
2 + 3ij
•20∑i=1
i∑j=1
i3
2 + 3ij.
Príklad 5.10. Vytvorte maticuM typu 10×10, pre ktorúMi,i = 3,Mi+1,i = Mi,i+1 = 1,i = 1, . . . , 10 a v²etky ostatné prvky sú nuly.
10
Kapitola 6
Funkcie
Príklad 6.1. Napí²te funkciu, ktorá na vstupe na£íta tri £ísla a vypí²e, £i môºu by´stranami trojuholníka.
Príklad 6.2. Napí²te funkciu, ktorá na£íta ²tyri £ísla a,b,c,d, ktoré predstavujú dvauzavreté intervaly [a,b] a [c,d]. Program vypí²e tú z nasledujúcich viet, ktorá pre ne platí:
Intervaly su disjunktne.
Jeden z intervalov je podmnozinou druheho.
Intervaly sa pretinaju.
Príklad 6.3. Napí²te program, ktorého vstupom budú koe�cienty kvadratickej rovniceax2 + bx+ c = 0 a výstupom reálne korene (dva alebo jeden) alebo string "rovnica nema
realne korene".
Príklad 6.4. Napí²te program, ktorého vstupom bude prirodzené £íslo n a ktorý navypo£íta sú£et 2 + 4 + . . .+ n, ak n je párne alebo 2 + 4 + . . .+ (n− 1), ak n je nepárne.
Príklad 6.5. Napí²te funkciu, ktorá vypo£íta sú£in abc pre také a < b < c ∈ N, pre ktoréa2 + b2 = c2 a a+ b+ c = 1000.
Príklad 6.6. Pre prirodzené £ísla de�nujme nasledovnú postupnos´:n→ n/2, ak n je párnen→ 3n+ 1, ak n je nepárneTeda napríklad, ak by prvým £lenom postupnosti bolo £íslo 13, postupnos´ by vyzeralanasledovne:13 40 20 10 5 16 8 4 2 1Napí²te program, ktorý zistí, pre ktoré prirodzené £íslo men²ie ako N, má takáto postup-nos´ najv䣲iu d¨ºku.
Príklad 6.7. Napí²te funkciu pre výpo£et sumy
f(n) =
n∑r=1
r∑s=1
s2
10 + 4r3.
Príklad 6.8. Napí²te funkciu, ktorá ur£í, £i sú dve vstupné mnoºiny A, B (dané reálnymivektormi) disjunktné. Ak nie sú disjunktné, vypí²e ich prienik.
Príklad 6.9. Napí²te funkciu, ktorá pre daný vektor x vráti v²etky prvky x, ktoré súv䣲ie ako mean(x).
Príklad 6.10. Napí²te funckiu, ktorá pre daný vektor x ∈ Rn a funkciu f : R → R,vypo£íta
∑ni=1 i · f(xi).
11
Príklad 6.11. Napí²te funkciu, ktorá ur£í, £i sú dve vstupné slová anagramy. Anagramje slovo, ktoré z iného slova vznikne iným usporiadaním písmen.
Príklad 6.12. Napí²te funkciu, ktorá pre vektor x a reálne £íslo k nájde taký prvok x,ktorý je najbliº²ie ku k.
Príklad 6.13. Vytvorte funkciu, ktorá zo vstupného vektora vymaºe v²etky duplicitnéprvky.
Príklad 6.14. Vytvorte funkciu, ktorá vráti TRUE, ak sa reálne £íslo na vstupe nachádzavo vstupnom vektore x.
12
Kapitola 7
Práca s maticami a vektormi
7.1 Funkcie *apply
V R sa for a while £asto dajú nahradi´ takzvanými looping funkciami:
• lapply: prechádza list a vypo£íta hodnotu danej funkcie pre kaºdý jeho prvok
• sapply: funguje rovnako ako lapply, ale pokúsi sa výsledok zobrazi´ v jednoduch-²om tvare
• apply: aplikuje funkciu na podmnoºiny po©a
• tapply: aplikuje funkciu na podmnoºinách vektora
• mapply: viacrozmerná verzia lapply
1. apply
X <- matrix(rnorm(30), nrow=5, ncol=6)
apply(X, 2 ,sum)
apply(X, 1:2, function(x) x/2)
2.lapply
l <- list(a = 1:10, b = 11:20)
lapply(l, mean)
lapply(l, sum)
3.sapply
l <- list(a = 1:10, b = 11:20)
l.mean <- sapply(l, mean)
class(l.mean)
l.mean[1]
l.mean[['a']]
Uvaºujme takúto dvojitú sumu:
f(n) =
n∑r=1
r∑s=1
s2
10 + 4r3
1.výpo£et pomocou vnorených for cyklov
13
suma1 <- function(n){
sum <- 0
for (r in 1:n){
for (s in 1:r)
sum <- sum+s^2/(10+4*r^3)
}
sum
}
2.výpo£et pomocou funkcií row a column a sú£tov prvkov matice
suma2 <- function(n){
mat <- matrix(0,ncol=n,nrow=n)
sum( (col(mat)^2) / (10+4 * row(mat) ^ 3) * (col(mat) <= row(mat)) )
}
3.výpo£et pomocou sapply
suma3 <- function(n){
f <- function(r){ sum(((1:r)^2 / (10 + 4 * r^3)))}
sum(sapply(1:n, FUN=f))
}
Pomocou system.time zistite, ktorá implementácia je najrýchlej²ia a ktorá najpomal²ia
7.2 Cvi£enia
Príklad 7.1. Vytvorte maticuM1, ktorej i, j-ty prvok je minimom z indexov i, j a maticuM2, ktorej i, j-ty prvok je maximom z indexov i, j.
Príklad 7.2. Vyrie²te sústavu rovníc
3x+ 2y − z = 1 (7.1)
2x− 2y + 4z = −2 (7.2)
−x+ 0.5y − z = 0. (7.3)
Príklad 7.3. Napí²te funkciu, ktorá vráti po£et NA vo vektore.
Príklad 7.4. Napí²te funkciu, ktorá pre dva vektory x, y a index k vráti po£et prvkov y,ktoré sú men²ie ako xk.
Príklad 7.5. Napí²te funkciu, ktorej vstupom budú £ísla k ∈ R a n ∈ N a výstupommatica typu n× n, ktorá ma na diagonále k a mimo diagonály 1.
Príklad 7.6. Napí²te funkciu, ktorej vstupom bude vektor x a prirodzené £íslo d a vý-stupom matica, ktorá bude ma´ v i-tom st¨pci vektor i-tych mocnín x, kde i = 1, . . . , d.Napríklad pre vstup x <- c(1,2,3), d=3 dostaneme výstup
1 1 1
2 4 8
3 9 27
Príklad 7.7. Napí²te funkciu, ktorej vstupom bude vektor x = (x1, ..., xn) a výstupomvektor ((x1 + x2 + x3)2/1, (x2 + x3 + x4)2/2, ..., (xn−2 + xn−1 + xn)2/(n− 2)).
Príklad 7.8. Napí²te funkciu, ktorej vstupom bude n-prvkový vektor a výstupom zvy²okciferného sú£tu prvkov tohto vektora po delení tromi.Napríklad pre vektor (0,1,2,7) je poºadovaný výstup 1 a pre vektor (2,3,4) je výstup 0.
14
Príklad 7.9. Napí²te funkciu, ktorej vstupom bude n-prvkový vektor pozostávajúci z£ísel 0,1,2 a výstupom trojprvkový vektor udávajúci po£ty týchto £ísel.Teda napríklad pre vstupný vektor (0,0,1,2,2,1,0,1,1,1) dostaneme výsledok (3,5,2).
Príklad 7.10. Napí²te funkciu, ktorej vstupom bude n-prvkový vektor a výstupom lo-gická hodnota (T/F) v závislosti od toho, £i je daný vektor palindróm.Za palindróm povaºujeme re´azec, ktorý sa "rovnako £íta" odpredu aj odzadu, napríkladabcba alebo abccba sú palindrómy, ale abcbad nie.
Príklad 7.11. Napí²te funkciu, ktorej vstupom bude vektor pozostávajúci z núl a jedno-tiek a výstupom £íslo, ktoré udáva po£et "sérií"v tomto vektore. Pod sériou rozumiemepostupnos´ rovnakých £ísel, pred a za ktorou je iné £íslo.Teda napríklad vektor (0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1) má 6 sérií.
Príklad 7.12. Napí²te funkciu, ktorej vstupom bude vektor x = (x1, ..., xn) a výstupommatica F , ktorej i-ty riadok je (xi, x
3i , ln(1 + xi)). Vypí²te v²etky nepárne riadky matice
F , ktorá je výstupom tejto funkcie pre vstupný vektor x, ktorý obsahuje diskretizáciuintervalu [0,10] na 21 rovnakých £astí.
Príklad 7.13. Napí²te funkciu, ktorej vstupom je matica s celo£íselnými prvkami. Vý-stupom funkcie bude matica tých istých rozmerov s tým, ºe kaºdé nepárne £íslo budenahradené svojim dvojnásobkom.
Príklad 7.14. Napí²te funkciu, ktorá pre vstupnú ²tvorcovú maticu M ur£í, £i je
• symetrická
• pozitívne semide�nitná
• ortogonálna
Príklad 7.15. Vytvorte maticu typu 7 × 4, ktorej st¨pce budú ©ubovo©né ²tyri rôznepermutácie prvkov vektora (2, 6, 8, 12, 21, 34, 49).
Príklad 7.16. Napí²te funkciu, ktorá pre maticu M vráti vektor, ktorého prvky tvoriadiagonálu matice M2.
Príklad 7.17. Napí²te funkciu, ktorá pre vstupnú maticu M
• vypí²e rozdiel medzi najmen²ím a najv䣲ím prvkom
• vypí²e riadkové a st¨pcové indexy najv䣲ieho a najmen²ieho prvku
• vzájomne vymení najv䣲í a najmen²í prvok
Príklad 7.18. Napí²te funkciu, ktorá pre vstupnú maticuM vypo£íta Kroneckerov sú£inmatice (
1 5 02 4 3
)s maticou M, teda (
1 5 02 4 3
)⊗M =
(M 5M 02M 4M 3M.
)Príklad 7.19. Na£ítajte dáta swiss (dostupné priamo v R). Pomocou funkcie apply
vypí²te riadkové a st¨pcové priemery.
15
Kapitola 8
Rekurzia
Príklad 8.1. Napí²te rekurzívnu funkciu na výpo£et faktoriálu. Porovnajte rýchlos´ vý-po£tu s rie²ením pomocou cyklov a s funkciou factorial implementovanou v R.
Príklad 8.2. Ko©ko rôznych rastúcich postupností d¨ºky n môºeme vytvori´ z k prirodze-ných £ísel 1:k? Problém rie²te pomocu rekurzie a potom napí²te funkciu, ktorá ho vyrie²ibez pouºitia rekurzie: porovnajte rýchlos´ oboch rie²ení.
Príklad 8.3. Napí²te rekurzívnu funkciu, ktorej vstupom budú £ísla n a k a na výstupevypí²e n v²etkými moºnými spôsobmi ako sú£et k prirodzených s£ítancov.
Príklad 8.4. Napí²te dve vzájomne rekurzívne funkcie, ktoré pre vstup n ∈ N ur£ia, £ije £íslo n párne alebo nepárne.
Príklad 8.5. Napí²te dve vzájomne rekurzívne funkcie, ktoré pre vstup n ∈ N0 vypo£í-tajú n-tý £len Hofstadterovej postupnosti
F (0) = 1; M(0) = 0; F (n) = n−M(F (n− 1)), M(n) = n− F (M(n− 1)), n > 0.
Príklad 8.6. Nech x1 = 1, x2 = 5, x3 = 2 a xn = log2(xn−1)+xn−2+√xn−3. Vypo£ítajte
x100.
Príklad 8.7. Napí²te rekurzívnu funkciu, ktorá otestuje, £i je vstupný vektor palindróm.Palindróm je re´azec, ktorý sa rovnako '£íta' odpredu aj odzadu. Porovnajte rýchlos´výpo£tu s rie²ením príkladu 7.10.
Príklad 8.8. Napí²te rekurzívnu funkciu na h©adanie najmen²ieho prvku vektora x.
Príklad 8.9. Napí²te rekurzívny program, ktorý pre dané £ísla n a k, kde 1 ≤ k ≤ nvypí²e v²etky podmnoºiny ve©kosti k mnoºiny {0, . . . , n− 1}.
Príklad 8.10. Grayov kód je cyklický kód, v ktorom kaºdé ¤al²ie kódové slovo sa lí²iod predchádzajúceho len v jednom bite a posledné slovo kódu sa lí²i od prvého tieº lenv jednom bite. Pre jednoduchos´ predpokladajme, ºe slovo v na²om prípade reprezentujevektor pozostávajúci z núl a jednotiek. Grayov kód d¨ºky k sa dá zostavi´ rekurzívne:horná polovica kódu je Grayov kód d¨ºky k − 1 s £íslom 0 pridanou na prvú pozíciu adruhá polovica kód d¨ºky k − 1 napísaný odzadu s £íslom 1 pridaným na prvú pozíciu.Napí²te funkciu, ktorá bude generova´ Grayov kód d¨ºky k ∈ N.
16
Kapitola 9
Optimalizácia
Príklad 9.1. Nájdite minimum funkcie sin2(x) + x/10 na intervale (0, 2π).
Príklad 9.2. Nájdite maximum funkcie 2√x− x2 − x na intervale [0, 2].
Príklad 9.3. Nájdite minimum funkcie f(x1, x2) = (x21 + x22 − 11)2 + (x1 + x22 − 7). Zapo£iato£né body vo©te postupne body (-4,4), (2,-2) a (2,2).
Príklad 9.4. Nájdite korene rovnice x2 + x = 1.
Príklad 9.5. Spolo£nos´ musí zakúpi´ rie²enie na redukciu emisií oxidu síri£itého o 2milióny jednotiek a oxidu uhli£itého o 3 milióny jednotiek. Prvé rie²enie stojí 5 eur najednotku zne£istenia pre obe zlú£eniny. Druhé rie²enie zníºi emisie oxidu síri£itého rovnakoako prvé, ale emisie oxidu uhli£itého zníºi dvojnásobne; jednotková cena je 8 eur. Akákombinácia oboch rie²ení splní poºiadavky na emisie pri minimálnych nákladoch?
17
Kapitola 10
Rozdelenia pravdepodobnosti
Pre v䣲inu rozdelení vieme v R po£íta´ hodnoty nasledovných funkcií (* ozna£uje rozde-lenie):
• d*: hustota
• p*: distribu£ná funkcia
• q*: kvantilová funkcia
• r*: realizácia náhodného výberu
Normálne rozdelenie
dnorm(x, mean, sd) #hustota
pnorm(q, mean, sd) #distribucna funkcia
qnorm(p, mean, sd) #kvantil
rnorm(n, mean, sd) #nahodna realizacia
x <- seq(-20,20,by=.1)
y <- dnorm(x)
plot(x,y, type="l", col="red", lwd=2)
y <- dnorm(x,mean=2.5,sd=3)
plot(x,y, type="l", col="blue", lwd=2)
y <- pnorm(x,mean=3,sd=4)
plot(x,y, type="l", col="green", lwd=2)
Viacrozmerné normálne rozdelenie
install.packages("mvtnorm")
library(mvtnorm)
x <- rmvnorm(n=5000, mean=c(1,2), sigma=diag(2))
colMeans(x)
var(x)
plot(x, col=rainbow(10), pch=19)
library(MASS)
fit2<-kde2d(x[,1],x[,2])
persp(fit2$x, fit2$y, fit2$z,col=rainbow(25))
18
10.1 Cvi£enia
Príklad 10.1. Výrobca vyrába sú£iastky, ktorých hmotnos´ má normálne rozdelenie sostrednou hodnotou 17.46g a varianciou 375.67g. Aká je pravdepodobnos´, ºe náhodnevybraná sú£iastka váºi viac ako 19g?
Príklad 10.2. Nech sú£iastky z predchádzajúcej úlohy majú chybovos´ 0.005. Dodávajúsa v baleniach po 25 kusov. Aká je pravdepodobnos´, ºe náhodne vybrané balenie obsahujepráve jednu chybnú sú£iastku?
Príklad 10.3. Testujeme ved©aj²ie ú£inky lieku nasledovným spôsobom: prvému pacien-tovi dáme najniº²iu dávku, akú máme k dispozícii. Ak mal pacient i nejaké ved©aj²ieú£inky, pacientovi i+1 dávku zníºime (ak môºeme). Ak pacient i nemal ºiadne ved©aj²ieú£inky, rozhodujeme sa pod©a výsledku hodu mincou: ak padne hlava, pacient i+1 dostanerovnakú dávku ako pacient i, ak padne znak, pacientovi i+1 dávku zvý²ime (ak môºeme).
Napí²te program, ktorého vstupom bude vektor pravdepodobností ved©aj²ích ú£inkovp pre jednotlivé dávky, pravdepodobnos´ padnutia hlavy na minci b a po£et pacientovn a ktorého výstupom bude vektor d¨ºky n s dávkami lieku pridelenými jednotlivýmpacientom. Predpokladáme, ºe máme k dispozícii dávky (1, 2, . . . , k).
Príklad 10.4. Máme n nezávislých javov, ktoré nastávajú s pravdepodobnos´ami (p1, ..., pn).Napí²te funkciu, ktorej zadáme vektor (p1, ..., pn) a ktorá vypo£íta pravdepodobnos´, ºenastane práve jeden z týchto javov.
Príklad 10.5. Máme dve urny. V prvej je 10 modrých a 8 ºltých guli£iek, v druhej je6 modrých a 6 ºltých. Vytiahneme guli£ku z prvej urny a dáme ju do druhej. Potomvytiahneme náhodne guli£ku z druhej urny. Simula£ne ur£te pravdepodobnos´, ºe tátoguli£ka je modrá.
Príklad 10.6. Vygenerujte vektor x, ktorý predstavuje logaritmus náhodného výberurozsahu 1000 zo ²tandardizovaného normálneho rozdelenia. Pomocou funkcie ifelse na-hra¤te v²etky chýbajúce hodnoty hodnotou 9999.
Príklad 10.7. Nech pravdepodobnos´ prenosu choroby z komára na £loveka je pri jednomu²tipnutí 1/500. Napí²te funkciu, ktorá vypo£íta pravdepodobnos´ nákazy po u²tipnutí nkomármi.
Príklad 10.8. Napí²te funkciu, ktorej vstupom bude prirodzené £íslo n a ktorá vykonánasledovné operácie:
1. vygeneruje n £ísel x = (x1, . . . , xn) zo ²tandardizovaného normálneho rozdelenia
2. vypo£íta ich aritmetický priemer x̄
3. ak x̄ > 0, vygeneruje n £ísel y = (y1, . . . , yn) z exponenciálneho rozdelenia s para-metrom x̄ak x̄ ≤ 0, vygeneruje n £ísel z = (z1, . . . , zn) z exponenciálneho rozdelenia s para-metrom −x̄ a poloºí y = −z
4. vypo£íta hodnotu k, ktorá udáva po£et tých i, pre ktoré je |yi| > |xi|
5. vráti x, y a k.
19
Kapitola 11
Vizualizácia dát a gra�ka
11.1 Základné gra�cké prostredie
Prázdny graf
plot.new()
plot.window(xlim = c(0, 10),ylim = c(-2, 4), xaxs = "i")
box()
axis(1, col.axis = "grey30")
axis(2, col.axis = "grey30",las = 1)
title(main = "nazov grafu",col.main = "green4",sub = "popis",
col.sub = "green4", xlab = "os x", ylab = "os y",
col.lab = "blue", font.lab = 3)
box("figure", col = "grey90")
�iarový graf
x = 1995:2005
y = c(81.1, 83.1, 84.3, 85.2, 85.4, 86.5,88.3, 88.6, 90.8, 91.1, 91.3)
plot.new()
plot.window(xlim = range(x),ylim = range(y))
lines(x, y, lwd = 2, type="l",col="darkblue") #type:l,s,S,h,p,b,o
title(main = "Vynosy za obdobie 1995-2005",
xlab = "rok",
ylab = "vynos")
axis(1)
axis(2)
box()
Lineárna regresia
x = rnorm(500)
y = x + rnorm(500)
plot.new()
plot.window(xlim = c(-4.5, 4.5), xaxs = "i",ylim = c(-4.5, 4.5),
yaxs = "i")
z = lm(y ~ x)
abline(h = -4:4, v = -4:4, col = "lightgrey")
abline(a = coef(z)[1], b = coef(z)[2])
points(x, y)
axis(1)
20
axis(2, las = 1)
box()
title(main = "Regresna priamka")
title(sub = "(500 pozorovani)")
Kolá£ový graf
meat = c(8, 10, 16, 25, 41)
names(meat) = c("Lamb","Mutton","Pigmeat","Poultry","Beef")
pie(meat,main = "New Zealand Meat Consumption",cex.main = 2)
Obr. 11.1
Grafy funkcií
g <- function(t) { return (t^2+1)^0.5 }
x <- seq(0,5,length=10000)
y <- g(x)
plot(x,y,type="l")
curve((x^2+1)^0.5,0,5)
curve((x^2+2)^0.5,0,5,add=TRUE,col="blue")
f <- function(x) return((x^2+1)^0.5)
plot(f,0,5)
21
11.2 Trojrozmerná gra�ka
library(lattice)
a <- 1:10
b <- 1:15
eg <- expand.grid(x=a,y=b)
eg$z <- eg$x^2 + eg$x * eg$y
wireframe(z ~ x+y, eg)
wireframe(z ~ x+y, eg,shade = TRUE)
#rgl
X <- Y <- seq(-2, 0, length.out= 20)
Z <- outer(X,Y,
function(X,Y) 2/exp((X-.5)^2+Y^2)-2/exp((X+.5)^2+Y^2))
cc <- colorRamp(rev(rainbow(10)))
Zsc <- (Z-min(Z))/diff(range(Z))
rgbvec2col <- function(x) do.call(rgb,c(as.list(x),list(max=255)))
colvec <- apply(cc(Zsc),1,rgbvec2col)
library(rgl)
surface3d(X,Y,Z,col=colvec)
bbox3d(color=c("white","black"))
11.3 Cvi£enia
Príklad 11.1. • Na£ítajte dáta cars a nakreslite ich scatterplot.
• Pomocou funkcie points pridajte do grafu nové pozorovania v bodoch (20,58) a(19,60) £ervenou farbou.
• Pomocou funkcie lines pridajte do grafu regresnú priamku modrou farbou.
• Do grafu pridajte popis, ktorý rozlí²i pôvodne £ierne a nové £ervené pozorovania.
• Pomocou par a mfrow vytvorte ved©a seba dva histogramy, jeden pre ©avý a druhýpre pravý st¨pec dát.
Príklad 11.2. Vygenerujte diskretizáciu intervalu [-50,50] na 1000 £astí a nakreslite grafyfunkcií ln(x), exp(x), sin(2x), sin(x)/ cos(x).
Príklad 11.3. Vytvorte maticu typu 20×20, ktorej prvky budú náhodné £ísla z intervalu[0, 1]. Vykreslite ju pomocou funkcie image.
22
Kapitola 12
R Markdown
RMarkdown je nástroj na tvorenie komplexných výstupov v rôznych formátoch, napríkladpdf, wordoské súbory, prezentácie a podobne. Ke¤ºe spája R s mnoºstvom externýchnástrojov, help nie je v tomto prípade dostupný cez ?. Súbor R Markdown je textovýsúbor s príponou .Rmd, ktorý má obvykle nasledovný obsah:
• Hlavi£ka, ktorá má na za£iatku a na konci �-
• Kusy Rkovského kódu, ktoré majú na za£iatku a na konci �`
• Text
Príklad jednoduchého R Markdown dokumentu
12.1 Základné príkazy
Zdôraznenie
*italic* **bold**
_italic_ __bold__
Hlavi£ky
# Header 1
## Header 2
### Header 3
ZoznamyNeo£íslované zoznamy:
* Item 1
* Item 2
+ Item 2a
+ Item 2b
O£íslované zoznamy:
23
1. Item 1
2. Item 2
3. Item 3
+ Item 3a
+ Item 3b
Linky
http://example.com
[linked phrase](http://example.com)
Obrázky zo siete alebo lokálne súbory v domovskom adresári:
![](http://example.com/logo.png)
![optional caption text](figures/img.png)
12.2 Pridávanie R a LaTeX kódu
Rkovské príkazy, ktoré chceme vykona´ a zobrazi´:
```{r}
summary(cars$dist)
summary(cars$speed)
Rkovské príkazy vnútri textu:
There were `r nrow(cars)` cars studied
Grafy:
```{r}
plot(cars, pch = 18)
```
Bloky kódu, ktoré chceme zobrazi´, ale nie vykona´:
```
This text is displayed verbatim / preformatted
```
LATEXrovnice vnútri textu:
$equation$
Rovnice na samostatnom riadku:
$$ equation $$
24
Literatúra
[1] Gillespie, Lovelace. E�cient R programming. O'Reilly Media, Incorporated, 2016.
[2] Wickham, Grolemund. R for data science: import, tidy, transform, visualize, andmodel data. �O'Reilly Media, Inc.", 2016.
25