Cvičenie 5 - Použitie R Markdown a R Shiny

Cieľom piateho cvičenia je naučiť sa rozšírené funkčnosti systému na báze R pre reportovanie a tvorbu aplikácií (R Markdown a R Shiny).

R Markdown

Pre vytvorenie nového skriptu stlačte File -> New File -> R Markdown, alebo jednoducho kliknite na zelené + a vyberte možnosť R Markdown.

V ďalšom kroku si vytvorený dokument pomenujeme, a vyberieme preferovaný formát.

Vytvorili sme skript, v ktorom sa na začiatku nachádza YAML hlavička, ktorá definuje metadata, ktoré sme si zvolili pri vytváraní.

Pre spustenie R Markdownu stlačte tlačidlo Knit na lište skriptu, a sledujte čo sa stalo.

Základné prvky R Markdown

kód Popis
*italic*alebo _italic_ Šikmé písmo
**bold** alebo __bold__ Tučné písmo
~~slovo~~ Prečiarknuté písmo
x^2^ Horný index
--- Pomlčka
-- Spojovník

# Header 1

## Header 2

### Header 3

Nadpisy

- Item 1

- Item 2

- Item 3

Jednoduchý nečíslovaný zoznam

* Item 1

* Item 2

  + Item 2a

  + Item 2b

Nečíslovaný zoznam

1. Item 1

2. Item 2

  + Item 2a

  + Item 2b

Číslovaný zoznam
http://example.com Link, priamo
[moj text](http://example.com) Link s vloženým textom
[![moj text](http://example.com/logo.png)

alebo

![moj text](figures/img.png)

Odkaz na obrázok
> Toto je citácia v bloku Text (citácia) zarovnaná do bloku
******** Horizontálna čiara

Názov 1 | Názov 2 | Názov 3

------- | ------- | -------

Hodnota 1.1 | Hodnota 1.2 | Hodnota 1.3

Hodnota 2.1 | Hodnota 2.2 | Hodnota 2.3

Tabuľky

Vkladanie R kódu

kód Popis
Dva plus dva je `r 2 + 2`. Inline vloženie kódu

``` {r}

   dim(iris)

```

Kúsky kódu v texte (code chunks)

``` {r, eval=FALSE}

   dim(iris)

```

Nastavenia pre evaluáciu a výpis

  - eval ... TRUE/FALSE – vypíše/nevypíše „výpočet“ (def. TRUE

  - echo ... TRUE/FALSE – vypíše/nevypíše „zdroják“ (def. TRUE)

Viac v R Markdown Reference Guide alebo R Markdown Cheat Sheet

Na základe týchto podkladov vytvorte R Markdown, podľa pokynov v úlohe:

Ako môžete vidieť na obrázku vyššie okrem formátu document pomocou R Markdown môžeme vytvoriť aj interaktívny dokument Shiny a beamer Presentation.

Vytvoríme interaktívny HTML dokument s použitím RShiny prvkov. Pri vytvorení zvolíme možnosť Shiny ako na nasledujúcom obrázku:

Alebo do YAML hlavičky pridáme runtime : shiny

Príklad:

R Shiny

Shiny je platforma pre vytváranie interaktívnych R programov vložených do web stránok

Vytvorenie novej Shiny aplikácie: File -> New File -> Shiny Web App ->

Základné funkcie

Vstupy Input() a výstupy Output() zadávame do skriptu ui.R.

Ako sa má vypísať (renderovať) výsledok určíme pomocou funkcie render() v skripte server.R, pričom sa na vstupy a výstupy odkazujeme pomocou znaku  $, napríklad output$premenná. Kód serverovej funkcie obalíme do render* funkcie pred uložením výsledku.

V nasledujúcich častiach podrobne rozoberieme vzorový kód a vysvetlíme použitie „reaktívnych“ prvkov na generovanie výstupu. Zatiaľ sa však skúste "hrať" s ukážkovou aplikáciou a sledujte zdrojový kód, aby ste získali prvotný prvotný prehľad. Nezabudnite si pozorne prečítať komentáre.

Shiny príklad 1

Používateľské rozhranie je definované v zdrojovom súbore s názvom ui.R:

server.R sa generuje sa náhodná distribúcia s požadovaným počtom pozorovaní a potom sa vynesie do grafu ako histogram. Všimnite si však aj to, že funkcia, ktorá vracia graf, je zabalená do funkcie renderPlot.

Shiny príklad 2

Nasledújci príklad ukáže použitie väčšieho množstva vstupných ovládacích prvkov, ako aj použitie reaktívnych funkcií na generovanie textového výstupu.

Prvý príklad mal zadaný jeden číselný vstup pomocou slider-a a jedného výstupu grafu. Tento príklad má o niečo viac: dva vstupy a dva typy textového výstupu.

Ak sa pokúsite zmeniť počet pozorovaní na inú hodnotu, uvidíte ukážku jedného z najdôležitejších vlastností Shiny aplikácií: vstupy a výstupy sú navzájom prepojené a zmeny sa okamžite šíria. V tomto prípade sa namiesto opätovného načítania celej stránky aktualizuje iba zobrazenie tabuľky, keď sa zmení počet pozorovaní.

Všimnite si, že v ui.R funkcie sidebarPanel a mainPanel sa teraz volajú s dvoma argumentmi (zodpovedajúcimi zobrazeným dvom vstupom a dvom výstupom):

Serverová časť aplikácie sa tiež trochu skomplikovala. Teraz vytvárame:

Tieto výrazy fungujú podobne ako renderPlot výraz použitý v prvom príklade: deklarovaním vykresľovacieho výrazu zadáme, že by sa zmena mala vykonať, len keď sa zmení jeho závislosť. V tomto prípade je to buď jedna z užívateľských vstupných hodnôt input$dataset alebo input$n).

Shiny príklad 3

Zaviedli sme využívanie reaktívnych výrazov, zatiaľ sme však nevysvetľovali, ako fungujú. Predchadzajúci príklad rozšírime o ďalšie reaktívne prvky aby sme pochopili ako fungujú v Shiny. Keďže sú Shiny webové aplikácie interaktívne, vstupné hodnoty sa môžu kedykoľvek zmeniť a výstupné hodnoty sa musia okamžite aktualizovať, aby odrážali tieto zmeny.

Serverový skript deklaruje datasetInput reaktívny výraz, ako aj tri hodnoty reaktívneho výstupu. Pre každú definíciu sú podrobné poznámky, ktoré popisujú, ako to funguje v reaktívnom systéme:

Úloha 5.1

Vytvorte RShiny aplikáciu, ktorá bude obsahovať nadpis („Dáta Airquality“). V UI.R nastavte vzhľad RShiny aplikácie, ktorá bude mať tieto vstupy:

V SERVER.R vytvorte kódy pre vytvorenie: