Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné...

26

Transcript of Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné...

Page 1: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

PROGRAMOVANIE V JAZYKU R

poznámky k predná²kam a zbierka príkladov

Lenka Filová, KAM�, FMFI UK

28. februára 2020

Page 2: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 3: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 4: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

• 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

Page 5: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 6: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

t(A) # transpozicia matice

A %*% A # nasobenie matic

A * A # nasobenie po prvkoch

solve(A) # inverzia matice

A %*% solve(A)

5

Page 7: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 8: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 9: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 10: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

• 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

Page 11: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 12: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 13: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 14: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 15: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 16: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 17: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 18: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 19: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 20: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 21: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 22: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 23: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 24: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 25: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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

Page 26: Programovanie v jazyku R - uniba.sk · summary(object) je genericák funkcia pre súhrnné informácie o rôznych typoch objektov. gc() (garbage collection) niekedy uºito£né na

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