Hide/show outputs Shiny R

前端 未结 3 1262
庸人自扰
庸人自扰 2020-12-11 05:21

I am trying to find out how to show and hide my outputs like graphics and tabels each time when the user change something in the widjets. For instance I have a slider input

相关标签:
3条回答
  • 2020-12-11 05:35

    The reason your code didn't work is because you didn't make a call to useShinyjs() (if you read the documentation or look at any examples of using shinyjs, you'll see that you HAVE to call useShinyjs() in the UI).

    I couldn't replicate your code because it had too many errors, but just to demonstrate that it does work with outputs, here's a small example you can run. In your project, just add shinyjs::useShinyjs() somewhere in the UI.

    library(shiny)
    library(shinyjs)
    
    ui <- fluidPage(
      useShinyjs(),
      actionButton("hideshow", "Hide/show plot"),
      plotOutput("plot")
    )
    
    server <- function(input, output, session) {
      output$plot <- renderPlot({
        plot(rnorm(100))
      })
    
      observeEvent(input$hideshow, {
        # every time the button is pressed, alternate between hiding and showing the plot
        toggle("plot")
      })
    }
    
    shinyApp(ui = ui, server = server)
    
    0 讨论(0)
  • 2020-12-11 05:56

    As mentioned by Dieter in the comments you need to use conditionalPanel. For example, in your ui.R, instead of

    plotOutput('simulationChange')
    

    use

    conditionalPanel("output.show", plotOutput('simulationChange'))
    

    And in your server.R add the following:

    values <- reactiveValues()
    values$show <- TRUE
    
    observe({
        input$gender
        input$age
        input$birthplace
        input$education
        values$show <- FALSE
    })
    
    output$show <- reactive({
        return(values$show)
    })
    

    Also, don't forget to change values$show, when clicking on your button:

    observeEvent(input$button, {
        ...
        values$show <- TRUE
    })
    
    0 讨论(0)
  • 2020-12-11 05:59

    The other answers here don't seem to provide the right/complete answer. The solution is actually quite simple.

    You need to use outputOptions(output, 'show', suspendWhenHidden = FALSE)

    Below is a sample code that displays the text inside a conditionalPanel if the dropdown selection is 2 and hides if it is 1.

      library(shiny)
      
      ui <- fluidPage(
        selectInput("num", "Choose a number", 1:2),
        
        conditionalPanel(
          condition = "output.show",
          "The selected number is 2 so this text is displayed. Change it back to 1 to hide."
        )
        
      )
      
      server <- function(input, output, session) {
        output$show <- reactive({
              input$num == 2 # Add whatever condition you want here. Must return TRUE or FALSE
          })
        
        outputOptions(output, 'show', suspendWhenHidden = FALSE)
      }
        
      shinyApp(ui = ui, server = server)
    
    0 讨论(0)
提交回复
热议问题