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).
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.
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 |
| Nadpisy |
|
Jednoduchý nečíslovaný zoznam |
|
Nečíslovaný zoznam |
|
Čí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
|
Odkaz na obrázok |
> Toto je citácia v bloku |
Text (citácia) zarovnaná do bloku |
******** |
Horizontálna čiara |
|
Tabuľky |
kód | Popis |
---|---|
Dva plus dva je `r 2 + 2`. |
Inline vloženie kódu |
| Kúsky kódu v texte (code chunks) |
| 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:
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 ->
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.
Viac v Rshiny Cheat Sheet .
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.
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
.
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:
renderPrint
a renderTable
, ktoré vracajú output$summary
a output$view
hodnotyTieto 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
).
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:
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:
NumericInput
s textom („Počet riadkov tabuľky“), kde preddefinovaná hodnota bude 6, minimálna 1, maximálna 100 a krok nastavte na 5.selectInput, radioButtons, textInput, actionButton
) zgrupte do jednej skupiny.SelectInput
, s textom („Vyberte atribút“), možnosti budú všetky názvy stĺpcov dát airquality. RadioButtons
s textom („Vyberte farbu grafu“), s možnosťami zelená, žltá.TextInput
s textom („Zadajte nadpis grafu:“), kde preddefinovaná hodnota bude „Nadpis“. ActionButton
, pomocou ktorého sa zmeny vo výstupnom grafe vykonajú až po kliknutí na neho.mainPanel
vypíšte výstupy v poradí tabuľka, graf a text (veta). V SERVER.R vytvorte kódy pre vytvorenie:
SelectInput
v závislosti od stĺpca Month. Tento graf bude boxplot
, farba nastavte podľa vstupu RadioButton
a pridajte nadpis zo vstupu TextInput
. Pri zmene vstupov sa graf zmení až po kliknutí na tlačidlo ActionButton
.NumericInputu
(zobrazenie len posledných n riadkov tabuľky).