Is it possible to use uiOutput in a conditionalPanel in Shiny?

不想你离开。 提交于 2021-02-08 06:39:42

问题


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)

回答1:


Try

condition = "input.radio == 'show_date'",

instead



来源:https://stackoverflow.com/questions/31839815/is-it-possible-to-use-uioutput-in-a-conditionalpanel-in-shiny

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!