Poglavje 4 Napredni nasveti za uporabo paketa Shiny R

V tem poglavju predstavimo nekaj bolj naprednih napotkov za uporabo paketa Shiny. Primeri, ki so tu navedeni, zahtevajo bolj napredno znanje programiranja in razumevanje drugih programskih jezikov, ki niso R.

4.1 Odvisnosti widgetov in deklarativno programiranje

Spomnimo se primera “odzivnega widgeta” v 2. predavanju. Če ste bili dovolj pazljivi, ste opazili, da je aplikacija v konzoli vrnila opozorilo:

Warning: Error in checkHT: invalid 'n' -  must contain at least one non-missing element, got none.

Zakaj je izpisala opozorilo? Odgovor na vprašanje se nanaša na deklarativno obliko programiranja. Za razliko od klasičnega programiranja v R (imperativna oblika), kjer se ukazi izvajajo zaporedno, se pri Shiny aplikacijah ukazi izvajajo le po potrebi in “vsi naenkrat.” Izhod se bo torej posodobil, ko bo uporabnik spremenil vhod, od katerega je le-ta odvisen. Torej, ob spremembi vhoda se bodo istočasno spremenili vsi izhodi, ki so od njega odvisni.

Lahko opazimo, da se vsakič, ko naložimo datoteko, izhodu output$tabela vrednost dodeli dvakrat: prvič, ko se spremeni input$datoteka in se takrat posodobita output$tabela in output$odzivni_drsnik. V tem trenutku ima input$datoteka že neko vrednost, input$drsnik_dolzina pa ima vrednost NULL, zato se pri izvajanjue ukaza prikaže opozorilo head(read.csv(input$datoteka$datapath), input$drsnik_dolzina). Drugič se spremeni, ker se je v prejšnjem koraku posodobil input$drsnik_dolzina in se output$tabela posodobi glede na njegovo vrednost.

V našem primeru se posodabljanje vedno zgodi dvakrat, paziti pa moramo, da ne ustvarimo cikla posodabljana. V tem primeru ga bo Shiny zaznal in nam prekinil delovanje strežnika.

Če se želimo izogniti temu opozorilu moramo spremeniti pogoj, ki nadzoruje prikaz tabele:

output$tabela <- renderTable({
        #input$datoteka zamejamo z input$drsnik_dolzina
        if(!is.null(input$drsnik_dolzina)){
          ...
Wickham, Hadley et al. 2014. “Tidy Data.” Journal of Statistical Software 59 (10): 1–23.
Wickham, Hadley, and Garrett Grolemund. 2016. R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. " O’Reilly Media, Inc.".