Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Update content on server only after I click action button in Shiny

Tags:

r

shiny

plotly

I'm having problems with reactive output in shiny server in R.

What I want to do is create a plotly plot that uses values calculated based on input.

The output has to be updated only after I click submit/done button and the output has to be calculated as many times as needed.

What I managed to do was to update the content independently of the submit button (the submit button simply has no function) and the plot changed immediately after I changed 1 value.

What I would like to do is to change the plot only after I specify all the values of parameters I want.

Here is a minimal example of my ui.R code:

    shinyUI(fluidPage(
      titlePanel("Wages in Year 2016 for Czech Republic in CZK"),
       sidebarPanel(

      conditionalPanel(condition = "input.conditionedPanels==7",
                 selectInput("Age", "Age", choices = vek_mod$Vek, selected = "23-27"),
                 selectInput("ChosenSex", "Your sex", choices = pohlavi_mod$Pohlavie, selected = "Zena"),
                 actionButton("Button", "Done"),
                 p("Click so changes will take effect.")
      ),
        mainPanel(
         tabsetPanel(
           ...
            tabPanel("Minimal_Example", textOutput("Minimal_Example"), value = 7)
            ...
            , id = "conditionedPanels"
    )
   )
  )
 )

and here is the server.R code:

...
  output$Minimal_Example <- renderPrint({

    Age <- input$Age
    Sex <- input$ChosenSex
    c(Age, Sex)
    })
...

I tried a lot of things with observeEvent() as well as eventReactive() but so far nothing has worked for me.

If you want to see how the code behaves like, look here: http://52.59.160.3:3838/sample-apps/Mzdy_ShinyApp/

Tab is called Minimal_Example

Thanks

like image 693
StefanK Avatar asked May 30 '17 00:05

StefanK


1 Answers

submitButton is just made for this.


If you want to use actionButton instead, simply use isolate to avoid refresh based on value changes, and add the input$Buttonin the code like:

output$Minimal_Example <- renderPrint({
  input$Button
  Age <- isolate(input$Age)
  Sex <- isolate(input$ChosenSex)
  c(Age, Sex)
}) 
like image 163
HubertL Avatar answered Oct 24 '22 19:10

HubertL