1  Základy práce s R a s RStudiem

Dříve než se pustíme do studia R, potřebujete jisté základy. V této kapitole se naučíte

1.1 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 v Linuxu a ve Windows. 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 vždy vyhnout.) 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.)1

V Ubuntu naistalujete jednotlivé knihovny takto:

# 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:

# 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.

1.2 RStudio

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 Desktop, které firma Posit šíří zdarma pod licencí AGPL v3 pro Linux, Windows i Mac. (Existuje i cloudová verze dostupná na https://posit.cloud/.) 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 1.1.

Obrázek 1.1: Vývojové prostředí RStudio.

RStudio si můžete stáhnout na adrese https://posit.co/download/rstudio-desktop/. 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í). Současně ukazuje i to, kolik paměti zabírá současné sezení R. 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.
  • 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 nějaký systém správy verzí, např. git.

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 1.2 a 1.3):

  • 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 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. Kódování doporučuji nastavit na UTF-8, což je rozumný standard pro výměnu textů; v Linuxu a na macOs je standard, na Windows si tím můžete zjednodušit spolupráci s lidmi, kteří používají jiný operační systém nebo žijí v jiné zemi.
  • 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

(a)

(b)

Obrázek 1.2: Nastavení obecných částí RStudia.

(a)

(b)

(c)

(d)

(e)

(f)

Obrázek 1.3: Nastavení editoru RStudia.

Pokud jste hračičkové, můžete si stáhnout a nainstalovat do systému nějaký font, který podporuje ligatury technických symbolů, a v menu Tools\(\rightarrow\)Global Options...\(\rightarrow\)Appearance si jej nastavit jako Editor font. Pak se vám budou některé symboly složené z více znaků jako je např. <-, |>, >=, ==, != apod. zobrazovat jako jeden znak (v kódu budou samozřejmě stále oba). Vhodný font jen např. JetBrains Mono (https://www.jetbrains.com/lp/mono/) nebo Fira Code (https://github.com/tonsky/FiraCode).

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. Ve verzi 1.4 přidalo RStudio i populární “palety”. Spustíte je klávesovou zkratkou Ctrl+Shift+P. Pomocí palety můžete nejen rychle provádět operace, ke kterým byste jinak museli jít do menu, ale i nastavovat různé parametry prostředí RStudia. Dokumentaci k této vlastnosti najdete na stránce https://blog.rstudio.com/2020/10/14/rstudio-v1-4-preview-command-palette/.

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.

1.3 Alternativa: VSCode

S R je samozřejmě možné pracovat i v jiných vývojových prostředích než je RStudio. Nejzajímavější alternativou k RStudiu je editor Visual Studio Code (VSCode). VSCode vyvíjí společnost Microsoft a poskytuje jej zdarma pro všechny hlavní operační systémy (Linux, Windows i macOS). VSCode je v základu editor pro programovací jazyk JavaScript, ale díky rozsáhlému ekosystému doplňků (tzv. extensions) je možné jej používat pro mnoho dalších programovacích jazyků včetně R. VSCode je možné stáhnout na stránce https://code.visualstudio.com/.

Výhodou RStudia je, že je vyvíjené přímo pro práci s R, takže od první instalace obsahuje valnou většinu toho, co můžete při práci s R potřebovat. Na druhou stranu, RStudio má i svá omezení. Pokud potřebujete pracovat i s jinými programovacími jazyky, jsou možnosti RStudia omezené, takže možná budete potřebovat i nějaké další vývojové prostředí. Také podpora systémů správy verzí a psaní Makefilu je v RStudiu jen základní a podpora kontejnerizace pomocí Dockeru úplně chybí. Také samotné prostředí záložek je poměrně rigidní.

Naproti tomu VSCode je univerzální editor. To znamená, že v něm můžete kromě jazyka R vcelku pohodlně pracovat i s dalšími programovacími jazyky. Navíc má velmi dobrou podporu gitu (a je velmi pěkně integrovaný s GitHubem), Makefilů, Dockeru a mnoha dalších systémů. VSCode také při práci s R provádí jen statickou analýzu kódu a s R přímo nekomunikuje, takže se při zatížení R nezasekává (zároveň však nevidí do aktuálního obsahu proměnných a tuto informaci nemůže využít při editování kódu). Rozvržení okna do dílčích oken je ve VSCode mnohem flexibilnější a je možné používat větší počet terminálů a R konzolí. Hlavní výhodou VSCode je však integrace GitHub Copilotu. GitHub Copilot (https://github.com/features/copilot) je umělá inteligence vyvinutá Microsoftem pro programátory, která umí napovídat při psaní kódu. Pro vysokoškolské učitele a studenty je k dispozici zdarma. VSCode je navíc možné spustit i online na adrese https://vscode.dev/ nebo po přihlášení na https://github.dev/. Nevýhodou VSCode je však to, že je nutné je pro práci s R poměrně pracně nastavit. Nyní se podíváme, jak to udělat.

Příprava VSCode pro práci s R vyžaduje instalaci tří různých komponentů: 1) Je třeba nainstalovat různé VSCode doplňky (extensions). Tyto doplňky stáhnete přímo ve VSCode ve správci doplňků. Pokud se do VSCode přihlásíte, tyto doplňky se vám automaticky nainstalují na všechny počítače, které používáte, a budou se také automaticky aktualizovat. 2) Musíte nainstalovat různé balíky R. Ty bohužel musíte nainstalovat na každý počítač, který používáte, zvlášť a musíte si je i sami aktualizovat. 3) Některé věci musíte nastavit v konfiguraci VSCode. Částečně je možné tato nastavení “naklikat”, v některých případech však musíte editovat konfiguraci ručně pomocí JSON souborů. Pokud si např. chcete nastavit některé klávesové zkratky, které znáte z RStudia např. pro vložení “šipky” (<-) nebo trubky (|>), musíte si je nastavit ručně v souboru keybindings.json.

Nejdříve ve VSCode nainstalujte doplněk R (R Extension for Visual Studio Code od REditorSupport). Současně musíte do R nainstalovat balík languageserver od stejného autora (https://github.com/REditorSupport/languageserver); VSCode by vám měl instalaci tohoto balíku sám nabídnout. Kromě toho si nainstalujte i R balík lintr.

Základní R konzola je ve VSCode velmi primitivní, takže je rozumné doinstalovat si lepší. R extension doporučuje konzoli radian. Návod k její instalaci najdete na https://github.com/randy3k/radian; instalace vyžaduje Python 3.6 nebo novější. Následně musíte říct VSCode, kde radian najde. Ve správci doplňků vyberte doplněk R a klikněte na něj. Pak klikněte na ozubené kolečko a vyberte Extension Settings. Pak najděte položku RTerm pro svůj operační systém a nastavte cestu k radianu. Zaklikněte i volbu Bracketed Paste.

Podobně je i základní způsob zobrazování grafů ve VSCode velmi primitivní. Mnohem lepší dostanete, pokud si nainstalujete R balík httpgd. Následně musíte VSCode říct, aby jej používal. Opět jděte do Extension Settings doplňku R a zaklikněte volbu Use httpgd.

Pokud chcete mít možnost svůj kód ladit, nainstalujte si také doplněk R Debugger (R Debugger for VS Code od autora R Debugger). Aby fungoval, musíte ručně nainstalovar R balík vscDebugger.

Kromě těchto základních doplňků se hodí např. i následující doplňky:

  • IntelliCode (od Microsoftu) – pomáhá při vývoji,
  • Rewrap (od autora stkb) – pomáhá zalamovat komentáře,
  • Czech Language Pack for Visual Studio Code (od Microsoftu) – čeština,
  • GitLens (GitLens — Git supercharged od autora Eric Amodio) – zobrazuje informace o gitu přímo ve VSCode,
  • GitHub Copilot (GitHub Copilot od autora GitHub) – umělá inteligence pro psaní kódu,
  • GitHub Copilot Chat (od autora GitHub) – chat pro GitHub Copilot,
  • Quarto (Quarto od autora Quarto) – podpora Quarto,
  • Project Manager (Project Manager od autora Alessandro Fragnani) – správa projektů.

Pokud chcete mít v editoru k dispozici klávesovou zkratku Alt+- pro vložení šipky (<-) a Ctrl+Shift+M pro vložení trubky (|>), musíte otevřít konfigurační soubor keybindings.json a do něj přidat následující kód:

[
    {
        "key": "alt+-",
        "command": "type",
        "args": { "text": " <- " },
        "when": "editorTextFocus"
      },
      {
        "key": "ctrl+shift+m",
        "command": "type",
        "args": { "text": " |> " },
        "when": "editorTextFocus"
      }
]

Pokud chcete, aby se vám v editoru symboly jako <- a |> zobrazovaly jako jeden znak (ligatura), musíte 1) nainstalovat font, který tyto ligatury umí (např. Fira Code nebo JetBrains Mono), 2) nastavit jej ve VS Code a 3) povolit ve VSCode použití ligatur. Pomocí Ctrl+, otevřete nastavení VSCode a vyhledejte Editor: Font Family. Do daného pole zadejte název fontu, který chcete používat (např. 'Fira Code', 'JetBrains Mono', 'Droid Sans Mono', 'monospace', monospace). Pak vyhledejte ligatures. Toto nastavení musíte povolit v konfiguračním souboru. Klikněte tedy na Edit in settings.json a zde změňte "editor.fontLigatures": false na hodnotu true (musíte uložit pomocí Ctrl+S).

Pokud chcete mít podobné klávesové zkratky k dispozici i v terminálu radian, musíte si pro něj vytvořit profil a do něj zadat následující konfiguraci (mapování trubky |> na klávesovou zkratku Ctrl+Shift+M bohužel není možné; trubka se zde tedy mapuje na zkratku Ctrl+pravá šipka.):

options(
    radian.escape_key_map = list(
        list(key = "-", value = " <- ")
    ),
    radian.ctrl_key_map = list(
        list(key = "right", value = " |> ")
    )
)

Profily terminálu radian umístěte v Linuxu a na macOs do souboru $HOME/.config/radian/profile, ve Windows do souboru %USERPROFILE%/radian/profile. Více o konfiguraci radian najdete na adrese https://github.com/randy3k/radian.

Pokud se cítíte odvážní, můžete zkusit použít můj profil pro práci s R. Najdete jej na adrese https://gist.github.com/mkvasnicka/6a832b7d0e82eab484c364a6249b1716. Stáhněte si soubor R.code-profile a naimportujte jej do VSCode. Tím nastavíte ve VSCode vše potřebné. Stále však potřebujete nainstalovat i výše zmíněné balíky R a radian, včetně jeho konfigurace.

Základy použití VSCode najdete například na stránce https://code.visualstudio.com/docs/getstarted/tips-and-tricks. Začít můžete např. na https://code.visualstudio.com/docs/languages/r. Můžete využít i mnoha výukových videí na YouTube.

1.4 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():

library(dplyr)   # v závorce je jméno balíku

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:

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:

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.

Pokud máte v cestě k do uživatelského adresáře umístěny znaky s diakritiku (např. proto, že jméno vašeho uživatelského účtu je např. Jiřík), nebudou věci fungovat správně. Zejména vám nepůjdou spustit skripty (ani pomocí tlačítka Source v RStudiu) a nepůjdou vám instalovat a načítat balíky. Problém se skripty vyřešíte snadno: vytvoříte někde adresář na práci a tam budete skladovat své skripty. Problém s balíky vyřešíte tak, že si vytvoříte alternativní knihovnu. Knihovna je adresář, kde R instaluje a hledá balíky. Postup je následující:

  1. Vytvořte si adresář, kam můžete zapisovat a který neobsahuje v cestě divné znaky, ve Windows např. adresář C:/Rlibs. Následně si ověřte, že je nastaven pro čtení i zápis.
  2. Ve svém domovském adresáři vytvořte soubor .Rprofile a zapište do něj .libPaths("C:/Rlibs"). Všimněte si, že místo zpětných lomítek používáme v cestě obyčejná lomítka (jinak musíte zpětná lomítka zdvojit, tj. psát \\). Pokud soubor neexistuje, stačí v R spustit následující řádek:
writeLines('.libPaths("C:/Rlibs")', con = "~/.Rprofile")
  1. Po restartu RStudia se budou balíky hledat v tomto adresáři. Při instalaci balíků klikněte na pulldown menu “Install to Library:” a vyberte tento adresář. RStudio by si jej mělo po první instalaci balíku do tohoto adresáře pamatovat jako defaultní volbu

V Linuxu se balíky při instalaci kompilují pro váš operační systém, zatímco ve Windows se stahují už zkompilované. Pokud chcete mít možnost kompilovat balíky ze zdrojového kódu i ve Windows, musíte nainstalovat RTools. Stáhnout si je můžete zde: https://cran.r-project.org/bin/windows/Rtools/. Po jejich instalaci je třeba přidat je do vyhledávací cesty. Návod je opět na této stránce stránce. Nejjednodušší způsob, jak to udělat, je zpsat cestu do souborou .Renviron ve vašem domovském adresáři. Pokud tento soubor neexistuje, stačí v R spustit řádek:

writeLines('PATH="${RTOOLS40_HOME}\\usr\\bin;${PATH}"', con = "~/.Renviron")

Pokud jste si jistí, že nechcete balíky kompilovat, pak RTools v zásadě nepotřebujete. R však bude v takovém případě vypisovat následující varování:

WARNING: Rtools is required to build R packages but is not currently installed.
Please download and install the appropriate version of Rtools before proceeding:
http://cran.rstudio.com/bin/windows/Rtools/

V Linuxu jsou nástroje pro kompilaci balíků přítomné automaticky, takže žádné další kroky k instalaci RTools nejsou potřeba.

1.5 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()

?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

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():

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():

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:

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

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.

1.6 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/).

1.7 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 konzoly, 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 vstup kódu umístěn na šedém pozadí, zatímco výstup kódu je vypsán volně do textu; oboje je vysázeno “strojopisným” fontem. Stejně tak obrázky, které se v RStudiu zobrazí v záložce Plots jsou v této knize přímo v textu.

2.3 + 3 * 4      # výraz se okamžitě vyhodnotí
[1] 14.3
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
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
y <- sin(x)      # vyhodnocení funkce a přiřazení do proměnné y  (nic nevypíše)
plot(x, y)       # vykreslení hodnot

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 <- (složená ze znaků < a -; v RStudiu je možné použít klávesovou zkratku Alt+-). 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

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 7.3.

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.

1.8 Skripty

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ů:

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():

 # 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 1.2, 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).

# 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
# vykreslení vývoje veličin do grafu
pivot_longer(df, -t, names_to = "proměnná", values_to = "hodnota") |>
    ggplot(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!

1.9 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.
  3. Hrajte si a zkoušejte věci. Vymyslete si vlastní problém a zkuste jej vyřešit.
  4. 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.
  5. 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í.
  6. 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).
  7. Nepropadejte panice! Zvládnete to.
  8. Když všechno selže, je tu Google a StackOverflow.

  1. Při volbě alternativních knihoven BLAS a LAPACK však buďte opatrní. Minimálně v Ubuntu 20.04 jsou knihovny OpenBlas a Intel MKL pokažené – někdy skončí chybou, někdy vrací náhodný výsledek. V této verzi je tedy nejlepší použít Atlas. Pro jiné verze googlete.↩︎