Reattività: le basi

Casi di studio: creare applicazioni web con Shiny in R

Dean Attali

Shiny Consultant

Reattività: concetti base

  • Shiny usa la programmazione reattiva
  • Gli output reagiscono ai cambiamenti degli input
  • Se il valore di x cambia, tutto ciò che dipende da x viene ricalcolato
  • In R normale invece:

    x <- 5
    y <- x + 1
    x <- 10
    
  • Qual è il valore di y? 6 o 11?

Casi di studio: creare applicazioni web con Shiny in R

Variabili reattive

  • Tutti gli input sono reattivi
  • input$<inputId> dentro una funzione render fa ri-renderizzare l’output

    output$my_plot <- renderPlot({
        plot(rnorm( input$num ))
    })
    
  • output$my_plot dipende da input$num

    • input$num cambia ⇒

      output$my_plot reagisce

Casi di studio: creare applicazioni web con Shiny in R

Contesti reattivi

  • I valori reattivi si usano solo in contesti reattivi
  • Qualsiasi funzione render*() è un contesto reattivo
  • Usare un valore reattivo fuori da un contesto reattivo ⇒ errore
server <- function(input, output) { 
    print(input$num)
}
ERROR: Operation not allowed without an active reactive context.
Casi di studio: creare applicazioni web con Shiny in R

Osservare una variabile reattiva

  • Usa observe({ ... }) per accedere a una variabile reattiva

    server <- function(input, output) { 
        observe({ 
            print( input$num )  
        }) 
    }
    
  • Utile per il debug, per tracciare una variabile reattiva

  • Ogni variabile reattiva crea una dipendenza
observe({ 
    print( input$num1 ) 
    print( input$num2 )
})
Casi di studio: creare applicazioni web con Shiny in R

Creare una variabile reattiva

  • reactive({ ... }) per creare una variabile reattiva

  • Sbagliato:

    server <- function(input, output) {
        x <- input$num + 1
    }
    
    ERROR: Operation not allowed without an active reactive context.
    
  • Corretto:

    server <- function(input, output) { 
      x <- reactive({ 
          input$num + 1 
      })
    }
    
Casi di studio: creare applicazioni web con Shiny in R

Variabili reattive

  • Accedi a una variabile reattiva personalizzata come a una funzione:
    • aggiungi le parentesi ()
server <- function(input, output){
    x <- reactive({
        input$num + 1
    }) 
    observe({ 
        print( input$num )
        print( x() ) 
    })
}
Casi di studio: creare applicazioni web con Shiny in R

Passons à la pratique !

Casi di studio: creare applicazioni web con Shiny in R

Preparing Video For Download...