I have a pretty basic Shiny app.
I am using renderUI
and uiOutput
to populate a selectInput
where a date can be selected.
But I'd only like that selectInput
to appear if a user chooses an option via a radio button:
As it currently stands, the app radio buttons don't have any effect. (At this stage, IF things were working, clicking on 'no date' would mean nothing is plotted).
I'm sure the problem is here:
radioButtons('radio', 'Radio', choices=c('show_date', 'no_date'), selected = NULL, inline = FALSE),
conditionalPanel(
condition = "input.show_date == 'true'"
uiOutput('fdate')
),
It doesn't seem possible to use uiOutput
in a conditionalPanel. Why?
APP.R
library(shiny)
library(ggplot2)
library(dplyr)
library(leaflet)
DF <- data.frame(lon=c(-120.6596156, -87.27751, -119.7725868, -124.2026, -117.1858759),
lat=c(35.2827524, 33.83122, 36.7468422, 41.75575, 34.5008311),
date=c('2014-03-14', '2014-01-11', '2013-11-22', '2012-08-23', '2013-08-23'),
city=c('San Luis Obispo', 'Jasper', 'Fresno', 'Crescent City', 'Apple Valley'),
P1_name=c('John Doe', 'John Doe', 'John Doe', 'John Doe', 'Joe Blow'))
DF[, c('date', 'city', 'P1_name')] <- sapply(DF[, c('date', 'city', 'P1_name')], as.character)
server <- function(input, output, session) {
output$fdate<-renderUI({
selectInput('dates', 'Select date', choices=DF[which(DF$P1_name == input$person), ]$date, selectize = FALSE)
})
output$map<-renderLeaflet({
DF <- filter(DF, P1_name==input$person, date==input$dates)
output$city <-renderText({c("Location:", DF$city)})
m <- leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
setView(lng=DF$lon, lat=DF$lat, zoom=5) %>%
addMarkers(lng=DF$lon, lat=DF$lat, popup=DF$city)
})
}
ui <- fluidPage(
titlePanel("Testing Shiny"),
sidebarLayout (
sidebarPanel(
selectInput('person', 'Select person', choices=unique(DF$P1_name), selectize = FALSE),
radioButtons('radio', 'Radio', choices=c('show_date', 'no_date'), selected = NULL, inline = FALSE),
conditionalPanel(
condition = "input.show_date == 'true'"
uiOutput('fdate')
),
# uiOutput('fdate'),
textOutput("city")
),
mainPanel(
leafletOutput('map')
)
))
shinyApp(ui = ui, server = server)