xeroqu
xeroqu

Reputation: 435

Displaying an updated variable after clicking an action button in Shiny

I'm new to shiny and trying to accomplish rather a simple task using an action button:

Relevant code bits are:

server.R

...
rv <- reactiveValues() 
observe({
 if(input$run){
  rv$a <- someFunc(input$aa)
 }
})
output$msg = renderText({ rv$a })
...

ui.R

...
selectInput("aa", ...)
...
actionButton("run", "Run")
...
textOutput("msg")

How can I change msg based on the input aa each time user clicks the button?

Upvotes: 2

Views: 2969

Answers (1)

Mike Wise
Mike Wise

Reputation: 22817

I am not convinced I understood what you want, but I imagine it to be something like this:

library(shiny)
u <- fluidPage(
  titlePanel("Simple Selectable Reactive Function"),
    sidebarLayout(
      sidebarPanel(
        sliderInput("vv", "Choose a value",min=-3.14,max=3.14,value=0),
        selectInput("aa", "Choose a function", choices=c("sin","cos","exp")),
        actionButton("run", "Change Function and Run")
      ),
     mainPanel(
      h2("Results"),
      verbatimTextOutput("msg")
 )))
s <- function(input,output){

  rv <- reactiveValues(func=NULL) 

  observeEvent(input$run,{   rv$func <- input$aa })

  funcval <- reactive({
    v <- 0
    if (rv$func=="sin") v <- sin(input$vv)
    if (rv$func=="cos") v <- cos(input$vv)
    if (rv$func=="exp") v <- exp(input$vv)
    v
  })
  output$msg = renderPrint({
       if (is.null(rv$func)) return("not running")
       fv <- funcval()
       sprintf("%s(%.3f)=%.3f",rv$func,input$vv,fv)
    })
}
shinyApp(ui=u,server=s)

Yielding this:

enter image description here

Note that the slider input value formats its current value rather badly when the min and max values are not even. Not sure what one can do about this.

Upvotes: 5

Related Questions