Formation R

UI Dynamique

Updating Input

  • Il est possible de mettre à jours des inputs
  • Pour quelle raison faire cela?
  • reset, creer des hierarchies, etc…

Updating Input

2 formats:

  • Update***Input() + ObserveEvent()
  • renderUI() + uiOutput()

Update***Input()

Tous les types d’inputs peuvent être mis à jours:

  • updateDateInput()
  • updateNumericInput()
  • updateSliderInput()
  • updateSelectInput()
  • Toujours la même syntaxe

Update***Input()

Tous les types d’inputs peuvent être mis à jours:

  • updateDateInput()
  • updateNumericInput()
  • updateSliderInput()
  • updateSelectInput()
  • Toujours la même syntaxe

Update***Input()

Tous les types d’inputs peuvent être mis à jours:

  • updateDateInput()
  • updateNumericInput()
  • updateSliderInput()
  • updateSelectInput()
  • Toujours la même syntaxe

Update***Input()

Les paramètres :

  • update***Input( session, id, ...)


Utilisation :

  • observeEvent(input$***,{
                update***Input(session, id, ... )})

Exemple

ui <- fluidPage(
  selectInput('group', 'Groupe', df_fruits$food_group),
  selectInput('subgroup', 'Sous-Groupe', df_fruits$food_subgroup )
)

server <- function(input, output, session){
  
  
  observeEvent(input$group,
               { 
                   sub_df <-df_fruits %>%
                     filter(food_group== input$group) %>%
                     select(food_subgroup)
                 
                 updateSelectInput(session, 'subgroup', 
                                   'Sous-Groupe', sub_df$food_subgroup )}
  )
}

shinyApp(ui, server)

Instructions

  • lire df_fruit en ligne
  • Tester le code
  • Ajouter un selectInput se basant sur name
  • Faire en sorte qu’il dépende de subgroup

renderUI() + uiOutput()

  • renderUI() pour la partie Server
  • uiOutput() pour la partie UI

Avantages

  • Optimiser le niveau de dynamisme
  • Regenerer l’interface

Exemple

ui <- fluidPage(
  selectInput("type", "type", c("slider", "numeric")),
  uiOutput("numeric")
)

server <- function(input, output, session){
  output$numeric <- renderUI({
    if (input$type == "slider") {
      sliderInput("dynamic", input$label, 
                  value = 0, min = 0, max = 10)
    } else {
      numericInput("dynamic", input$label, 
                   value = 0, min = 0, max = 10) 
    }
  })
}

Instructions

  • Reprendre la dernière App créee
  • Utiliser renderUI et uiOutput pour créer les inputs

Récapitulatif

Input dynamique

  • update***Input(): Mettre à jour un input déjà existant, fonctionne bien avec observeEvent()
  • renderUI(): Créer un input depuis le server et l’afficher dans l’UI uiOuput()

Questions?