library(shiny)
mychoices = list()
for(i in 1:5) mychoices[[i]]=i
names(mychoices)=1:5
app = shinyApp(
ui = pageWithSidebar(
headerPanel(h3('State test'),"State test"),
sidebarPanel(
conditionalPanel("output.mystate == 0",
actionButton('doplot',"Do the plot")),
conditionalPanel("output.mystate == 1",
actionButton('reset',"Reset X & Y"))
),
mainPanel(
conditionalPanel("output.mystate == 0",
radioButtons("radiox", label = h3("X-axis"),
choices = mychoices,
selected = 0),
radioButtons("radioy", label = h3("Y-axis"),
choices = mychoices,
selected = 0)),
conditionalPanel("output.mystate == 1",
plotOutput("xyplot"))
)
),
server =function(input, output, session) {
mystate = 0 # for reset functionality
makeReactiveBinding("mystate")
output$mystate <- reactive(mystate)
outputOptions(output, "mystate", suspendWhenHidden = FALSE)
dat = matrix(rnorm(500),ncol=5)
observeEvent(input$doplot,{
mystate = 1
output$mystate <- reactive(mystate)
outputOptions(output, "mystate", suspendWhenHidden = FALSE)
})
observeEvent(input$reset,{
mystate = 0
output$mystate <- reactive(mystate)
outputOptions(output, "mystate", suspendWhenHidden = FALSE)
})
output$xyplot = renderPlot({
if(input$doplot==0)
return(NULL)
isolate({
xidx = as.numeric(input$radiox)
yidx = as.numeric(input$radioy)
updateRadioButtons(session,"radiox", label = h3("X-axis"),choices = mychoices,selected = 0)
updateRadioButtons(session,"radioy", label = h3("Y-axis"),choices = mychoices,selected = 0)
system("sleep 2") # simulate heavy computation...
plot(dat[,xidx],dat[,yidx],
xlab = paste('X var = ',xidx),ylab = paste('Y var = ',yidx))
})
})
}
)
runApp(app)