Réactivité 101

Études de cas : créer des applications Web avec Shiny en R

Dean Attali

Shiny Consultant

Principes de base de la réactivité

  • Shiny utilise la programmation réactive
  • Les sorties réagissent aux changements des entrées
  • Si la valeur de x change, tout ce qui dépend de x est réévalué
  • À comparer avec R classique :

    x <- 5
    y <- x + 1
    x <- 10
    
  • Quelle est la valeur de y ? 6 ou 11 ?

Études de cas : créer des applications Web avec Shiny en R

Variables réactives

  • Toutes les entrées sont réactives
  • input$<inputId> dans une fonction render force la sortie à se régénérer

    output$my_plot <- renderPlot({
        plot(rnorm( input$num ))
    })
    
  • output$my_plot dépend de input$num

    • input$num change ⇒

      output$my_plot réagit

Études de cas : créer des applications Web avec Shiny en R

Contextes réactifs

  • Les valeurs réactives ne s'emploient que dans des contextes réactifs
  • Toute fonction render*() est un contexte réactif
  • Accéder à une valeur réactive hors contexte réactif ⇒ erreur
server <- function(input, output) { 
    print(input$num)
}
ERROR: Operation not allowed without an active reactive context.
Études de cas : créer des applications Web avec Shiny en R

Observer une variable réactive

  • observe({ ... }) pour accéder à une variable réactive

    server <- function(input, output) { 
        observe({ 
            print( input$num )  
        }) 
    }
    
  • Utile pour le débogage, suivre une variable réactive

  • Chaque variable réactive crée une dépendance
observe({ 
    print( input$num1 ) 
    print( input$num2 )
})
Études de cas : créer des applications Web avec Shiny en R

Créer une variable réactive

  • reactive({ ... }) pour créer une variable réactive

  • Incorrect :

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

    server <- function(input, output) { 
      x <- reactive({ 
          input$num + 1 
      })
    }
    
Études de cas : créer des applications Web avec Shiny en R

Variables réactives

  • Accéder à une variable réactive personnalisée comme à une fonction :
    • ajouter des parenthèses ()
server <- function(input, output){
    x <- reactive({
        input$num + 1
    }) 
    observe({ 
        print( input$num )
        print( x() ) 
    })
}
Études de cas : créer des applications Web avec Shiny en R

Passons à la pratique !

Études de cas : créer des applications Web avec Shiny en R

Preparing Video For Download...