---
title: "Základy práce s R a s RStudiem"
author: "Michal Kvasnička"
documentclass: article
output:
html_document:
theme: cerulean
toc: yes
toc_float: yes
pdf_document: default
fontsize: 10pt
classoption: a4paper
---
# Základy práce s\ R a s\ RStudiem {#kap:basics}
Dříve než se pustíme do studia\ R, potřebujete jisté základy. V\ této kapitole se naučíte
- jak nainstalovat R,
- jak nainstalovat, zkonfigurovat a používat RStudio,
- jak načíst, nainstalovat a aktualizovat balíky funkcí a dat,
- jak číst dokumentaci a kde najít pomoc,
- jak používat konzolu a
- jak psát a spouštět skripty.
## Instalace R
Analyzovat a vizualizovat data v\ R se nenaučíte čtením knihy: sami si musíte hrát s\ R a experimentovat se skutečnými nebo simulovanými daty. K\ tomu budete potřebovat mít R nainstalované na svém počítači. V\ tomto oddíle stručně popíšeme, jak R instalovat ve Windows a v\ Linuxu. Instalace je v\ obou případech nenáročná; v\ Linuxu vám poskytneme několik rad, jak optimalizovat výkon\ R.
Vlastní návod k\ instalaci i instalační soubory najdete na https://cran.r-project.org/.
Instalace ve Windows je jednoduchá. Mimo jiné ji ukazuje tento tutoriál: http://youtu.be/Ohnk9hcxf9M.
Určité problémy mohou vzniknout, pokud máte v\ cestě ke svému domovskému adresáři mezery a písmena s\ háčky a čárkami. (Těm je však lepší se vyhnout vždy.) Pokud by standardní cesty kvůli mezerám, háčkům a čárkám nefungovaly, je možné nastavit jiné cesty, viz dále.
V\ mnoha distribucích Linuxu je R obsaženo přímo ve standardních repositářích, a\ to včetně jednotlivých přidaných balíků. Doporučuji se těmto balíků *vyhnout*. Rozumnější je postupovat podle návodu na výše uvedené stránce: přidat si CRAN do repositářů a nainstalovat pouze jádro\ R a ty balíky, které CRAN nabízí v\ binární podobě. Ostatní balíky si nainstalujete přímo v\ R. Tak budete mít vždy aktuální verze.
R používá k\ maticovým výpočtům standardní numerické knihovny BLAS a LAPACK. Existuje několik verzí těchto knihoven, které se od sebe velmi liší výkonem. Mezi nejlepší patří OpenBLAS, AtlasBLAS a Intel MKL (pouze pro procesory značky Intel). V\ Linuxu se implicitně používá nepříliš efektivní verze těchto knihoven, proto doporučujeme nainstalovat a zvolit některou efektivnější verzi. Výrazně tak zrychlíte mnoho svých výpočtů. Než si zvolíte jednu z\ těchto knihoven, podívejte se na aktuální výsletky testů výkonosti na internetu. (V\ současnosti je asi nejlepší obecnou volbou OpenBlas nebo Intel MKL, pokud máte procesor značky Intel.)
V\ Ubuntu naistalujete jednotlivé knihovny takto:
```bash
# instalace OpenBLAS
sudo apt install libopenblas-base
# instalace ATLAS
sudo apt install libatlas3-base liblapack3
# intalace Intel MKL
sudo apt install intel-mkl-full
```
Poslední nainstalovaný BLAS by se měl automaticky použít. Později jej můžete zkonfigovat takto:
```bash
# volba BLAS
sudo update-alternatives --config libblas.so.3-x86_64-linux-gnu
# volba LAPACK
sudo update-alternatives --config liblapack.so.3-x86_64-linux-gnu
```
Funkce `sessionInfo()` v\ R vypíše, kromě jiných informací, i\ to, který BLAS a LAPACK vaše\ R používá.
V\ ostatních distribucích Linuxu budete zřejmě postupovat analogicky.
Volba efektivnějších verzí BLAS a LAPACK ve Windows je podstatně obtížnější a může zahrnovat kompilaci daných knihoven i\ vlastního\ R. Pokud si ji chcete vyzkoušet, hledejte na Internetu nejnovější návod.
## RStudio {#sec:basics-setting}
R\ funguje jako program na příkazovém řádku (ve Windows má k\ dispozici jednoduché grafické rozhraní). Pro vážnou práci s\ ním je však vhodné použít nějaké vývojové prostředí (IDE). Nejlepší vývojové prostředí pro\ R je v\ současné době RStudio, které je šířené zdarma pod licencí AGPL\ v3 pro Windows, Linux i\ Mac. RStudio ke svému běhu potřebuje Javu (doporučuji oficiální Javu od Oracle, ne její svobodné ekvivalenty). Jak RStudio vypadá, ukazuje obrázek\ \@ref(fig:basics-rstudio).
RStudio je zdarma ke stažení na www.rstudio.com, konkrétně na https://rstudio.com/products/rstudio/download/. Pro Windows je dispozici instalační soubor, pro Linux standardní balíky `.deb` a `.rpm`. Po instalaci byste měli jednou za čas zkontrolovat, zda máte nejnovější verzi RStudia, a\ to v\ menu RStudia `Help`$\rightarrow$`Check for Updates`.
RStudio se skládá z\ obecného menu a čtyř panelů. Každý panel může obsahovat několik záložek. Můžete si zkonfigurovat, kde bude který panel, jak bude veliký a které záložky budou ve kterém panelu. Mezi hlavní záložky RStudia patří:
- **Konzola** (Console)\ je určena pro interaktivní práci s\ R. Kód, který do ní zapíšete, R okamžitě vyhodnotí a výsledky vypíše do konzoly nebo zobrazí jako graf.
- **Editor** (Source)\ -- slouží k\ psaní skriptů. Kód, který do něj napíšete, můžete uložit a opakovaně spouštět a ladit. V\ editoru můžete současně editovat libovolné množství souborů různých typů (R\ script, R\ markdown, textové dokumenty a mnohé další).
- **Přehled prostředí\ R** (Environment) zobrazuje všechny objekty (data, funkce apod.), které aktuálně žijí ve zvoleném prostředí v\ R (implicitně v\ globálním prostředí). Přehled prostředí také umožňuje importovat některé typy dat a mazat dříve vytvořené objekty.
- **Soubory** (Files) zobrazují soubory a adresáře, které jsou v\ aktuálním projektu nebo adresáři a umožňuje s\ nimi dělat základní operace (mazat je, přejmenovávat apod.).
- **Grafy** (Plots) zobrazují grafy, které jste v\ R vykreslili. Tato záložka se otevře teprve ve chvíli, kdy nějaký graf vytvoříte.
- **Balíky** (Packages) zobrazují seznam instalovaných balíků. Zároveň umožňují i\ balíky načítat, instalovat, aktualizovat a odstraňovat.
- **Nápověda** (Help) zobrazuje dokumentaci k\ funkcím, datům a balíkům.
- **Historie** (History) zobrazuje kód, který jste v\ minulosti spustili v\ konzoli. Umožňuje jej také uložit a přesunout do konzoly a do editoru.
Další typy záložek se objeví v\ případě, že budete dělat něco pokročilého, např.\ budete používat `make` nebo správu verzí.
Ikona *Workspace Panes* (vypadá jako čtyři malá okénka) umožňuje jednotlivé panely a záložky dočasně zvětšit přes celou obrazovku (po ťuknutí zobrazí klávesové zkratky).
V\ pravém horním rohu RStudia je přepínač projektů. **Projekty** umožňují elegantně oddělit různé projekty, na kterých současně pracujete. Každý projekt má svůj vlastní adresář, vlastní proces\ R atd. Víc o\ projektech najdete na https://goo.gl/CxyHVS.
Doporučuji, abyste si před vlastní prací RStudio zkonfigurovali. Z\ menu RStudia vyvolejte `Tools`$\rightarrow$`Global Options...` a nastavte, jak se má RStudio chovat. Vysvětlení jednotlivých položek najdete např.\ na stránce https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio. Doporučuji zejména následující nastavení (moje nastavení ukazují obrázky \@ref(fig:basics-rstudio-setting1) a \@ref(fig:basics-rstudio-setting2)):
- V\ záložce `General` doporučuji vypnout `Restore .RData into workspace` a nastavit `Save workspace to .RData on exit` na `Never`. V\ opačném případě se vám na začátku sezení nahrají do paměti výsledky výpočtů z\ předchozího sezení. Na první pohled to vypadá to jako dobrý nápad a úspora času, ale ve skutečnosti je to zdroj chyb, které se špatně hledají. Měli byste si zvyknout, že veškeré výpočty máte uložené v\ podobě skriptu a můžete je tedy kdykoli znovu provést.
- V\ záložce `Code`$\rightarrow$`Editing` si zapněte `Insert spaces for tab` a `Tab width` nastavte aspoň na 4.
- V\ záložce `Code`$\rightarrow$`Display` zapněte vše (snad kromě `Highlight selected line`) a `Margin column` nastavte na hodnotu kolem\ 80 nebo 90.
- V\ záložce `Code`$\rightarrow$`Saving` zapněte vše. Zvažte, zda nenastavit kódování na UTF-8, což je rozumný standard pro výměnu textů.
- V\ záložce `Code`$\rightarrow$`Completetion` zapněte vše snad kromě `Show help tooltip on cursor idle`.
- V\ záložce `Code`$\rightarrow$`Diagnostics` zapněte vše. Tak vám RStudio bude při psaní kódu v\ editoru zobrazovat diagnostické rady.
- V\ záložce `Sweave` nastavte `Weave Rnw files using` na `knitr` a `Typeset LaTeX into PDF using` na `pdflatex`
Kromě menu můžete RStudio ovládat i pomocí klávesových zkratek. Seznam klávesových zkratek se zobrazí po volbě menu `Tools`$\rightarrow$`Keyboard shortcuts help` nebo po stisku `Alt+Shift+K`. Úplný seznam klávesových zkratek najdete i\ na https://goo.gl/aPSel6.
R lze ukončit funkcí `q()`. Pokud běží v\ RStudiu, ukončíte jej jednoduše buď v\ menu `File`$\rightarrow$`Quit Session...` nebo křížkem okna.
R\ standardně při ukončení uloží všechny objekty v\ paměti (data, uživatelem definované funkce apod.) do souboru a při opětovném spuštění je opět načte (netýká se načtených balíků\ -- ty je třeba načíst pokaždé znovu). Někdy se to hodí, ale často je to zdrojem chyb, které se špatně hledají. Doporučuji tuto funkci v\ nastavení zakázat, viz výše.
Schopnosti RStudia je možné rozšířit pomocí "doplňků" (*addins*). Doplňky se instalují jako běžné balíky\ R (viz následující oddíly) a po instalaci jsou dostupné v\ roletce `Addins` v\ paletě nástrojů RStudia. Pokud si nainstalujete balík **addinslist**, přibude vám v\ menu doplňků volba `Browse RStudio addins`, která vám zobrazí dostupné doplňky, jejich popisy a umožní je jednoduše instalovat.
Různé návody k\ používání RStudia najdete zde na adrese https://goo.gl/ik2Yb9.
Cheatsheet pro používání RStudia získáte v\ menu `Help`\ $\rightarrow$\ `Cheatsheets`\ $\rightarrow$ `RStudio IDE Cheat Sheet`.
## Balíky
Všechny funkce, datové struktury, data i\ vše ostatní je v\ R organizováno do balíků. Základní balíky (`base`, `methods`, `datasets`, `utils` apod.) jsou přítomny v\ každé instalaci\ R a načtou se automaticky při jeho spuštění. Ostatní balíky je potřeba nainstalovat a před použitím načíst do paměti "ručně".
Seznam balíků, které máte aktuálně nainstalované, můžete v\ RStudiu zobrazit v\ záložce `Packages`. Balíky, které jsou aktuálně načtené do paměti, mají v\ seznamu zapnuté zaškrtávátko.
Pokud máte nějaký balík nainstalovaný, můžete jej začít používat. R\ však samo o\ sobě o\ objektech uložených v\ balících neví. Před jejich použitím je tedy třeba načíst balík do paměti (ve skutečnosti se načtou jen jména objektů v\ balíku do cesty, ve které R jednotlivé objekty hledá). K\ tomu slouží funkce `library()`:
```r
library(dplyr) # v závorce je jméno funkce
```
Data a funkce z\ balíku je možné využít i\ bez jeho načtení pomocí operátoru `::`, kterým se oddělí jméno balíku a jméno funkce. To se hodí zejména ve dvou situacích: 1)\ Při načtení nového balíku se někdy stane, že objekty z\ nově načteného balíku překryjí data a funkce z\ balíku, který jste načetli dříve. Dvojtečkový operátor vám umožní použít i\ tyto "překryté" objekty. 2)\ Někdy chcete použít jen jednu funkci a nechcete načítat celý balík. Pokud bychom tedy nenačetli balík **dplyr**, stále bychom mohli použít jednu z\ jeho funkcí takto:
```r
dplyr::anti_join() # jméno_balíku::jméno_funkce()
```
Pokud ovšem máte balík načtený pomocí funkce `library()`, můžete funkci zavolat jen jejím jménem bez jména balíku:
```r
anti_join() # jméno funkce z načteného balíku
```
Pokud chcete použít jakýkoli balík, musíte jen nejdříve nainstalovat. Instalace balíků v\ R je snadná, protože jejich valná většina je k\ dispozici v\ centralizovaných repositářích. Hlavním repositářem je CRAN (https://cran.r-project.org/). V\ RStudiu nainstalujete balíky z\ CRANu tak, že v\ záložce `Packages` kliknete na tlačítko `Install`. (Při první instalaci je třeba nastavit adresu zrcadla CRANu, ze kterého se budou balíky stahovat. Doporučuji použít zrcadlo `Global CDN RStudio`.) K\ ruční instalaci balíků slouží funkce `install.packages()`.
Balíky se neustále vyvíjejí (většinou zlepšují) a obvykle je dobré mít instalovány poslední verze. K aktualizaci balíků nainstalovaných z\ CRANu slouží v\ RStudiu v\ záložce `Packages` klikátko `Update`.
Kromě CRANu existuje i\ několik dalších repositářů. Nejvýznamnějším z\ nich je GitHub. GitHub (https://github.com/) obsahuje vývojové verze balíků a nové balíky, které se dosud nedostaly na CRAN. Návod, jak instalovat balíky z\ GitHubu, najdete na https://goo.gl/ttEz9J.
Implicitně se balíky instalují do uživatelského adresáře. V\ tomto adresáři se vytvoří vždy nový podadresář pro každou novou verzi\ R. To je proto, že při větší aktualizaci\ R už nemusejí původní balíky fungovat a je třeba je znovu stáhnout nebo zkompilovat.
Ve Windows se může stát, že R není schopné standardní uživatelský adresář využít. Typickým důvodem je to, že cesta k\ němu obsahuje mezery nebo písmena s\ diakritikou (např.\ když se váš uživatelský účet jmenuje Uživatel). V\ tomto případě je potřeba vytvořit vhodný adresář jinde (např. `C:\Rlibs`), a\ pak k\ němu nastavit cestu. To jde udělat dvěma různými způsoby:
1. Kliknete na `Start`, otevřete `Ovládací panely` (Control panel), v\ nich vyberete `Uživatelské účty` (User Accounts) a v\ nich zvolíte `Změnit pracovní prostředí` (Change my enviromental variables). Zde pak vytvoříte (nebo jen zeditujete, pokud už existuje) systémovou proměnnou `R_LIBS_USER`. Její obsah nastavíte na cestu ke svému zvolenému adresáři. Pokud chcete nastavit více cest, oddělíte je středníkem.
1. Ve Windows i\ v\ Linuxu můžete také nastavit alternativní cestu k\ uživatelsky instalovaným balíkům i\ tak, že do příslušného konfiguračního souboru přidáte na konec následující kód:
```r
.libPaths(c("C:/Rlibs"))
```
Pozor: místo zpětných lomítek používejte obyčejná lomítka (jinak musíte zpětná lomítka zdvojit, tj.\ psát `\\`). Můžete použít buď systémový konfigurační soubor `Rprofile.site` (při standardní instalaci je ve Windows umístěn v\ adresáři `C:\Program Files\R\R-X.X.X\etc`, kde `X.X.X` je číslo verze\ R, v\ Linuxu v\ adresáři `/usr/lib/R/etc/Rprofile.site`), nebo osobní konfigurační soubor `.Rprofile`. K\ zápisu do systémového konfiguračního souboru potřebujete administrátorská práva.
Umístění nově instalovaných balíků pak můžete nastavit i\ ve funkci `install.packages()`, kde to uděláte pomocí parametru `lib = "C:/Rlibs"`.
## Nápověda
Nikdo si nemůže pamatovat všechno\ -- a\ pamatovat si detaily použití jednotlivých funkcí je absurdní. Proto má R velmi dobrý systém nápovědy a dokumentace. RStudio tento systém ještě dále vylepšuje. Je velmi důležité, abyste se naučili dokumentaci k\ funkcím číst.
Nápovědu ke zvolené funkci můžete získat jedním ze tří způsobů. V\ konzoli napíšete jméno funkce (např.\ funkce `mean()`) bez závorek za otazníkem nebo jako argument funkce `help()`
```r
?mean # za otazníkem je jméno funkce
help("mean") # v uvozovkách je jméno funkce
```
nebo po napsání jména funkce do konzoly nebo editoru zmáčknete v\ RStudiu klávesu\ `F1`.
Všechny tyto cesty vedou ke stejnému výsledku: RStudio zobrazí stránku nápovědy k\ dané funkci.
Jedna stránka nápovědy může dokumentovat několik různých funkcí, které mají něco společného. Stránky dokumentace mají v\ R standardní strukturu. Je potřeba, abyste se s\ ní seznámili. Stránka dokumentace má následující strukturu:
- **Název funkce nebo tématu a balíku**, např. `mean {base}`. To znamená, že strana dokumentuje funkci `mean()` definovanou v\ balíku `base`.
- **Jméno stránky dokumentace**, zde "Arithmetic Mean".
- **Popis, co funkce dělají** (Description).
- **Popis syntaxe**, jak se funkce používají (Usage). Zde se uvádí zejména to, jaké má funkce parametry a jaké mají tyto parametry implicitní hodnoty (pokud nějaké mají) a. Ve funkci `mean()` je prvním parametrem\ `x`, který žádnou implicitní hodnotu nemá. Naproti tomu parametry `trim` a `na.rm` implicitní hodnoty mají. Pokud jejich hodnoty nezadáte, použijí se tyto implicitní hodnoty, tj.\ např.\ `trim` bude mít hodnotu\ 0. Všimněte si, že jednotlivé parametry jsou oddělené čárkou (`,`).
- **Vysvětlení parametrů** (Arguments). V\ této části se vysvětluje, co parametr představuje a v\ jaké datové struktuře má být parametr uložený.
- **Hodnota funkce** (Value) je oddíl, kde se vysvětluje, jaké hodnoty funkce vrací, co znamenají a v\ jaké datové struktuře je hodnota funkce uložená.
- **Odkazy na literaturu** (References).
- **Odkazy na jiné funkce, balíky nebo data** (See Also) uvádějí seznam funkcí, které nějak souvisejí s\ funkcemi, jejichž dokumentaci právě čtete.
- **Příklady použití funkcí** (Examples) ukazují, jak funkci použít. Často pomáhají pochopit, jak funkce funguje a jak ji použít.
Pokud dokumentaci otevřete v\ RStudiu, budou všechny odkazy klikací.
V\ R nemají dokumentaci jen jednotlivé funkce a datasety, ale i\ celé balíky.
Dokumentaci k\ balíkům včetně seznamu funkcí, které jsou v\ ní obsažené, je možné získat dvěma způsoby. Buď v\ konzoli zavoláte funkci `help()` s\ parametrem `package`
```r
help(package = "dplyr") # v uvozovkách je jméno balíku
```
nebo v\ RStudiu v\ záložce Packages kliknete na jméno zvoleného balíku.
Dokumentace k\ balíkům ukazuje, co vše daný balík nabízí. Obsahuje zejména soubor `DESCRIPTION`, který vysvětluje, kdo balík napsal, k\ čemu slouží a na jakých jiných balících závisí. Často obsahuje i\ odkaz na webovou stránku, kde se o\ daném balíku můžete dozvědět více. Dále může dokumentace balíků obsahovat seznam vinět a seznam funkcí a dat, které vám balík poskytuje.
Viněty jsou texty, které se nezaměřují na jednotlivé funkce, nýbrž ukazují, jak se balík používá jako celek, nebo vysvětlují nějaký princip, na kterém balík stojí. Seznam vinět přítomných v\ daném balíku je možné zobrazit v\ dokumentaci balíku kliknutím na "User guides, package vignettes and other documentation" nebo v\ konzoli pomocí funkce `vignette()`:
```r
vignette(package = "dplyr") # v uvozovkách je jméno balíku
```
Jednotlivou vinětu můžete zobrazit zobrazit kliknutím na její jméno v\ seznamu v\ RStudiu, nebo můžete v\ konzoli zadat jméno viněty do funkce `vignette()`:
```r
vignette("introduction", package = "dplyr") # první parametr je jméno viněty
```
Mnoho funkcí a balíků má k\ dispozici i\ demonstrační kód. Tyto kódy ukazují možnosti použití balíku nebo funkce nebo jejich obecné schopnosti. Tento kód můžete spustit takto:
```r
demo("graphics") # parametr funkce je téma / jméno demonstrace
demo("bench-set", package = "dplyr") # pokud není balík načtený
```
Pokud chcete zjistit, jaké demonstrace obsahuje nějaký balík, zadejte
```r
demo(package = "dplyr") # v uvozovkách je jméno balíku
```
a RStudio otevře záložku se jmény demonstrací přítomných v\ daném balíku. Pak vyvoláte demonstraci obvyklým způsobem.
## Kde najít pomoc
Někdy dokumentace R nestačí. To se děje typicky ve chvíli, když nevíte, v\ jaké funkci a v\ jakém balíku je implementovaná nějaká metoda, kterou potřebujete, nebo ve chvíli, když dostanete chybovou hlášku, které nerozumíte. Když se do takové situace dostanete, zeptejte se Googlu.
Řekněme například, že potřebujete zjistit, jak neparametricky porovnat shodu střední hodnoty, ale nevíte, kterou funkci použít; navíc si ani nemůžete vzpomenout, jaký statistický test provést. Stačí, když Googlu položíte tento (nesprávný) dotaz: "r non-parametric t test". Uvidíte, že dostanete několik odkazů, které budou naprosto dokonale relevantní.
Někdy jste však v\ situaci, kdy si opravdu nevíte rady a potřebujete položit dotaz živému člověku. K tomu slouží celá řada fór. Z\ nich nejdůležitější je StackOverflow (https://stackoverflow.com/).
## Konzola
R\ umožňuje práci ve dvou režimech: interaktivní práci a spouštění skriptů. K\ interaktivní práci s\ R slouží konzola (Console). Všechny výrazy, které sem napíšete za prompt (zobák, "`>`"), se okamžitě vyhodnotí a výsledky se vypíší zpět do konzole, tj.\ "na obrazovku".
Konzola tak slouží jako kalkulačka. Zkuste do ní zapsat následující výrazy a každý z\ nich "odeslat" klávesou `Enter`. V\ této knize je výstup kódu v\ textu uvozen dvěma křížky (`##`).
```r
2.3 + 3 * 4 # výraz se okamžitě vyhodnotí
```
```
## [1] 14.3
```
```r
x <- (1:20) / 3 # přiřazení hodnot do proměnné x (nic nevypíše)
print(x) # vypsání hodnot proměnné x
```
```
## [1] 0.3333333 0.6666667 1.0000000 1.3333333 1.6666667 2.0000000 2.3333333
## [8] 2.6666667 3.0000000 3.3333333 3.6666667 4.0000000 4.3333333 4.6666667
## [15] 5.0000000 5.3333333 5.6666667 6.0000000 6.3333333 6.6666667
```
```r
x # totéž, co print(x)
```
```
## [1] 0.3333333 0.6666667 1.0000000 1.3333333 1.6666667 2.0000000 2.3333333
## [8] 2.6666667 3.0000000 3.3333333 3.6666667 4.0000000 4.3333333 4.6666667
## [15] 5.0000000 5.3333333 5.6666667 6.0000000 6.3333333 6.6666667
```
```r
y <- sin(x) # vyhodnocení funkce a přiřazení do proměnné y (nic nevypíše)
plot(x, y) # vykreslení hodnot
```
```r
rm(x, y) # vymazání proměnných x a y
# vše za symbolem křížku až do konce řádku je komentář -- R to ignoruje
```
Všimněte si, že k\ přiřazení hodnoty do proměnné se v\ R používá značka `<-` a k\ oddělení desetinných míst čísla se používá desetinná tečka, zatímco čárka slouží k\ oddělení jednotlivých parametrů funkce. Pokud tedy napíšete
```r
median(2,5)
```
```
## [1] 2
```
funkce nespočítá medián z\ hodnoty 2.5, nýbrž medián z\ hodnoty\ 2; číslo\ 5 se funkci předá jako její druhý parametr, což je zde `na.rm`. Obecně platí, že první hodnota zadaná do funkce představuje její první parametr, druhá hodnota druhý parametr atd. Parametry, které mají implicitní hodnoty, můžete vynechat. Víc se o\ těchto věcech dozvíte v\ oddíle\ \@ref(sec:function-call).
V\ RStudiu má konzola dvě užitečné klávesové zkratky: šipky nahoru a dolů umožňují procházet historií minulých výrazů. Pokud tedy zadáte a spustíte výraz, můžete jej spustit znovu tak, že zmáčknete šipku nahoru a `Enter`. Ke složitějšímu vyhledávání slouží `Ctrl-`šipky. Ty prochází seznam historie tak, že uvažují jen ty výrazy, které začínají stejně jako to, co jste právě napsali na prompt konzoly.
## Skripty {#sec:basics-skripts}
Konzola slouží k\ experimentování a ladění kódu. Ke skutečné práci však slouží skripty, které vám umožní spouštět kód opakovaně a při tom jej měnit a ladit. Za výsledek své práce byste nikdy neměli považovat výsledky interaktivního hraní v\ konzoli, ať už ve formě spočítaných výsledků nebo vykreslených grafů, ale právě funkční skript. Pokud se ke své práci po čase vrátíte, nedokážete z\ "výsledků" nijak zjistit, jak jste k\ nim dospěli (a\ jestli jste v\ průběhu neudělali chybu), ani něco v\ již proběhlém výpočtu změnit. Naproti tomu skript jasně říká, co jste udělali, umožňuje, abyste svůj výpočet upravili a samozřejmě umožňuje i\ znovu získat jakékoli výsledky, ke kterým jste dospěli. Měli byste si tedy zvyknout pracovat primárně v\ editoru a konzoli používat jen k\ testování dílčích kusů kódu.
R\ skript je obyčejný textový soubor, do kterého napíšete R-kové výrazy jeden za druhý\ -- každý nový výraz na nový řádek. Když pak skript spustíte, tyto řádky se provedou úplně stejně, jako byste je napsali přímo do konzoly. Jedinou výjimkou je část řádku za znakem křížku (`#`), která se považuje za komentář\ -- R\ tuto část řádku ignoruje.
Skripty je zvykem ukládat do souborů s\ koncovkou `.R`. Soubor se skriptem můžete vytvořit v\ jakémkoli textovém editoru, který k\ textu nepřidává žádné značky, tj.\ např.\ ne v\ MS\ Wordu. RStudio však poskytuje velmi dobrý editor, který umí barevně zvýraznit syntaxi, odhalit některé chyby, napovědět vám, jak se funkce jmenuje a jaké má parametry atd. Nový skript vytvoříte v\ RStudiu klávesovou zkratkou `Ctrl`-`Shift`-`N` nebo v\ menu `File`$\rightarrow$`New File`$\rightarrow$`R Script`.
Kvůli ladění chyb i\ kvůli čitelnosti kódu je dobré skripty pěkně formátovat. Doporučuji dodržovat některý z\ následujících stylů:
- styl Hadleyho Wickhama http://adv-r.had.co.nz/Style.html nebo
- styl Googlu https://google.github.io/styleguide/Rguide.xml.
RStudio vás dokáže upozornit na špatný styl, pokud si tuto volbu zapnete, a\ umí i\ částečně váš skript přeformátovat do pěknějšího (v\ menu `Code`$\rightarrow$`Reformat code`); pomáhá také možnost automaticky odsadit řádky kódu (v\ menu `Code`$\rightarrow$`Reindent lines`) a pěkně zarovnat komentáře (v\ menu `Code`$\rightarrow$`Reflow comments`).
Jednou napsaný skript můžete spouštět znovu a znovu. Skript je možné spustit třemi způsoby. V\ RStudiu k tomu slouží klikátko `Source` v\ pravém horním rohu editoru a klávesová zkratka `Ctrl`-`Shift`-`S`. Skript jde samozřejmě spustit i\ z\ konzoly nebo jiného skriptu pomocí funkce `source()`:
```r
# jméno souboru do uvozovek
source("jmeno_skriptu_a_cesta_k_němu")
```
Funkce `source()` má mnoho dalších parametrů, viz dokumentace. Užitečný je zejména logický parametr `echo`, který ovlivňuje, zda se při spuštění skriptu vypisují do konzoly výrazy, které se právě vyhodnocují. Klikátko `Source` v\ RStudiu má podobnou volbu.
Někdy nechceme spustit celý skript naráz, ale chcete spouštět jen jednotlivé řádky kódu. Aktuální řádek nebo skupinu vybraných řádků spustíte klávesovou zkratkou `Ctrl+Enter`. Další možnosti spuštění skupin řádků a jejich klávesové zkratky najdete v\ menu `Code`.
I\ když skript může obsahovat všechny platné výrazy jazyka\ R, některé z\ nich není vhodné do skriptu umisťovat. Mezi takové výrazy patří zejména funkce, které mění vnější prostředí\ R. Ve skriptu zejména nikdy neinstalujte balíky pomocí funkce `install.packages()` a raději ani neměňte pracovní adresář pomocí funkce `setwd()`. Je bezohledné, pokud s\ někým sdílíte svůj skript a v\ něm voláte takové funkce, protože tím měníte nastavení cizího počítače.
Naproti tomu nesmíte zapomenout ve skriptu načíst balíky, které používáte, pomocí funkce `library()`. Je rozumné, abyste balíky načetli vždy na začátku skriptu. Díky domu snadno dohledáte, které balíky skutečně voláte (a\ které tedy musíte mít nainstalované).
Pokud jste nastavili RStudio tak, jak jsme uvedli v\ oddíle\ \@ref(sec:basics-setting), pak vám RStudio bude poskytovat velmi užitečné diagnostické rady pomocí ikonek zobrazených vlevo od čísel řádků kódu. Pokud na ikonku "najedete myší", zobrazí se diagnostická rada. Pro větší přehlednost RStudio vlnovkou podtrhne vyhodnocovaný kus kódu. Červená barva signalizuje chybu, žlutá varování a modrá upozornění na porušení stylistických konvencí, které sice nezabrání běhu vašeho kódu, ale znesnadňují jeho čtení.
Ukažme si použití skriptu na příkladů převzatém z\ knihy Radové a Dvořáka: *Finanční matematika pro každého*, Grada, 1993, s.\ 92--95. Neděste se, že zatím nebudete rozumět všemu, co kód dělá\ -- postupně se všechno potřebné dozvíte v\ této knize. Předkládejme, že musíme splácet dluh ve výši\ $D=\textrm{40 000}$ pomocí $n=6$ stejných ročních splátek, tj.\ anuit. Úroková sazba je\ $i=12$\ %. Kniha nám říká, že výši anuity\ $A$, úrokové platby\ $U$ a úmoru\ $M$ (anuita je úroková platba plus úmor) můžeme spočítat podle následujících vztahů, kde $t$ je čas:
\begin{align}
v &= 1 / (1 + i), (\#eq:basics-v)\\
a &= D i / (1 - v^n), (\#eq:basics-a)\\
U_{t + 1} &= a (1 - v^{n - t}), (\#eq:basics-U)\\
M_{t + 1} &= a (1 - v^{n - t}), (\#eq:basics-M)\\
D_{t} &= D - \sum_{i < t} M_i. (\#eq:basics-D)
\end{align}
Spočítat výši anuity a vývoj úrokové platby, úmoru a zbývajícího dluhu znamená jen přepsat matematické výrazy do R\ kódu. Zkuste nejprve následující kód zapsat přímo do konzoly. Zjistíte, že to není právě pohodlné. Pokud uděláte chybu, nemusíte přesně vědět, odkud začít: pokud např.\ na řádku `Dz <- D - cumsum(M)` napíšete omylem `D` místo `Dz`, přepíšete si původní hodnotu. A\ pokud se nakonec rozhodnete změnit výši dluhu např.\ na 1\ milion, budete muset všechny řádky spustit ručně znovu. Pokud však kód napíšete do skriptu, můžete kdykoli cokoli opravit, a\ to včetně výše dluhu, úrokové sazby nebo počtu období (vyzkoušejte si to).
```r
# vyčisti pracovní prostředí
rm(list = ls())
# načti potřebné balíky
library(ggplot2)
library(tidyr)
# zadej konstanty
D <- 40000 # výše dluhu
i <- 12 / 100 # úroková sazba
n <- 6 # počet období
# vlastní výpočet
t <- 1:n # vektor času
v <- 1 / (1 + i) # diskontní faktor
a <- D * i / (1 - v ^ n) # anuita
U <- a * (1 - v ^ (n - t + 1)) # vektor úrokových plateb v čase t
M <- a * v ^ (n - t + 1) # vektor úmorů v čase t
Dz <- D - cumsum(M) # vektor zbývajícího dluhu v čase t
df <- round(data.frame(t = t, U = U, M = M, D = Dz), 2)
# výpis výsledku v tabulce
print(df)
```
```
## t U M D
## 1 1 4800.00 4929.03 35070.97
## 2 2 4208.52 5520.51 29550.46
## 3 3 3546.06 6182.97 23367.49
## 4 4 2804.10 6924.93 16442.55
## 5 5 1973.11 7755.92 8686.63
## 6 6 1042.40 8686.63 0.00
```
```r
# vykreslení vývoje veličin do grafu
ggplot(gather(df, proměnná, hodnota, -t),
aes(x = t, y = hodnota, color = proměnná)) +
geom_line() +
xlab("čas")
```
Všimněte si, že ve skriptu načítáme všechny potřebné balíky, ale neinstalujeme je!
## Jak se R učit
Nakonec několik rad, jak se učit s\ R pracovat.
1. Nesnažte se zapamatovat všechny detaily volání každé funkce\ -- to snadno najdete v\ dokumentaci. Snažte se spíše pochopit princip, jak věci fungují.
2. Naučte se číst dokumentaci funkcí\ -- a\ skutečně ji čtěte. Když narazíte na neznámou funkci, přečtěte si pozorně dokumentaci a vyzkoušejte příklady na jejím konci.
1. Hrajte si a zkoušejte věci. Vymyslete si vlastní problém a zkuste jej vyřešit.
1. Ke kódu přistupujte "experimentálně". Pokud nevíte, jak něco funguje, vytvořte si hypotézu a vymyslete experiment, jak ji ověřit. Vždy přemýšlejte, jak a proč něco funguje.
1. Zkoušejte příklady, na které narazíte. Kód z\ příkladů raději opište než kopírujte `Ctrl-C Ctrl-V`. Když kód opíšete, něco si tím zapamatujete. Než kód spustíte, odhadněte, co udělá, a\ proč. Pak svůj odhad porovnejte se skutečností.
1. Až se naučíte základy, zkuste číst zdrojový kód cizích funkcí, které používáte. Tak se naučíte hodně o\ tom, jak pracovat (i\ o\ tom, co raději nedělat).
1. Nepropadejte panice! Zvládnete to.
1. Když všechno selže, je tu Google a StackOverflow.