web-dev-qa-db-fra.com

Shiny: comment initialiser la valeur réactive avec la valeur par défaut

Considérez la démo actionButton suivante: http://shiny.rstudio.com/gallery/actionbutton-demo.html

server.R:

shinyServer(function(input, output) {

  # builds a reactive expression that only invalidates 
  # when the value of input$goButton becomes out of date 
  # (i.e., when the button is pressed)
  ntext <- eventReactive(input$goButton, {
    input$n
  })

  output$nText <- renderText({
    ntext()
  })
})

ui.R:

shinyUI(pageWithSidebar(
  headerPanel("actionButton test"),
  sidebarPanel(
    numericInput("n", "N:", min = 0, max = 100, value = 50),
    br(),
    actionButton("goButton", "Go!"),
    p("Click the button to update the value displayed in the main panel.")
  ),
  mainPanel(
    verbatimTextOutput("nText")
  )
))

Dans cet exemple, avant d'appuyer sur le bouton d'action, le panneau de droite est vide. Je voudrais plutôt que le texte avec la valeur par défaut "50" soit rendu par défaut.

Comment obtenir la sortie à afficher avec les entrées par défaut si le bouton d'action n'a pas encore été pressé?

21
Eric

eventReactive prend également ignoreNULL comme documenté ici , ce qui vous permet d'initialiser l'objet sans une instruction if.

En ajoutant le ,ignoreNULL = FALSE au message d'origine (donner ou prendre une mise en forme), verbatimTextOutput affiche 50 au démarrage.

Cela fait un peu d'économie côté serveur, je suppose.

ui <- fluidPage(titlePanel("actionButton test"),
                sidebarLayout(
                  sidebarPanel(
                    numericInput(
                      "n",
                      "N:",
                      min = 0,
                      max = 100,
                      value = 50
                    ),
                    br(),
                    actionButton("goButton", "Go!"),
                    p("Click the button to update the value displayed in the main panel.")
                  ),
                  mainPanel(verbatimTextOutput("nText"))
                ))

server <- function(input, output) {

  ntext <- eventReactive(input$goButton, {
    input$n
  }
  # Adding this parameter to the original example makes it work as intended
  # with 50 in the output field to begin with
  , ignoreNULL = FALSE
  )

  output$nText <- renderText({
    ntext()
  })
}

shinyApp(ui = ui, server = server)
13
Agronymous Cowherd
    shinyServer(function(input, output) {
      values <- reactiveValues(default = 0)

      observeEvent(input$goButton,{
           values$default <- input$goButton
      })
      # builds a reactive expression that only invalidates 
      # when the value of input$goButton becomes out of date 
      # (i.e., when the button is pressed)
      ntext <- eventReactive(input$goButton, {
           input$n
      })

      output$nText <- renderText({
         if(values$default == 0){
              50
         }
         else{
            ntext()
         }
      })
    })
12
Krishna