当前位置:  开发笔记 > 编程语言 > 正文

闪亮的应用程序checkboxInput和conditionalPanel

如何解决《闪亮的应用程序checkboxInput和conditionalPanel》经验,为你挑选了1个好方法。



1> BigDataScien..:

好的,您可以将条件输入分为两类.

1)依赖于ui.R的输入(在您的情况下为checkboxInput)

2)依赖于server.R的输入(在您的示例中不必要)

解决方案:

1)您可以使用renderUI()函数轻松解决,请参阅下面的示例.

如果你真的想要2),你需要一个conditionalPanel,你将在server.R中使用一个被动函数,你将它保存在一个输出对象中并使用ui.R中的小JS-snippet访问它.对我来说,它看起来像1)对你来说已经足够了,如果我弄错了,请让我知道然后我们调整答案来解决2).

一个提示:

默认情况下,"checkbox"输入采用布尔值:false.所以你不会渲染"typeInput"(直到你点击"复选框").所以直到那一点"typeInput"为空.但是,如果你现在依赖于"typeInput"闪亮会被混淆,因为"typeInput"不会被渲染,因此不存在.所以在使用"typeInput"之前,你应该检查它是否可用: if(!is.null(input$typeInput))否则有光泽会抱怨你的应用中实际上没有"typeinput"(再次:至少在你点击"复选框"之前).

ui <- fluidPage(
  titlePanel("BC Liquor Store prices"),
  img(src = "BCLS.png",align = "right"),
  sidebarLayout(
    sidebarPanel(sliderInput("priceInput", "Price", 0, 100, c(25, 40), pre = "$"),

                 wellPanel(
                   checkboxInput("checkbox", "Filter by Type", FALSE),
                   uiOutput("conditionalInput")
                 ),

                 uiOutput("countryOutput")

    ),
    mainPanel(
      tabsetPanel(
        tabPanel("Plot", plotOutput("coolplot")), 
        tabPanel("Summary", verbatimTextOutput("summary")), 
        tabPanel("Table", tableOutput("results"))
      )
    )
  )
)

server <- function(input, output, session) {
  output$countryOutput <- renderUI({
    selectInput("countryInput", "Country",
                sort(unique(bcl$Country)),
                selected = "CANADA")
  })  

  output$conditionalInput <- renderUI({
    if(input$checkbox){
      selectInput("typeInput", "Product type",
                  choices = c("BEER", "REFRESHMENT", "SPIRITS", "WINE"),
                  selected = "WINE")
    }
  })

  filtered <- reactive({
    if (is.null(input$countryInput)) {
      return(NULL)
    }    

    bcl %>%
      filter(Price >= input$priceInput[1],
             Price <= input$priceInput[2],
             Type == input$typeInput,
             Country == input$countryInput
      )
  })

  output$coolplot <- renderPlot({
    if (is.null(filtered())) {
      return()
    }
    filtered() %>% ggvis(~Alcohol_Content, fill := "#fff8dc") %>% 
      layer_histograms(width = 1, center = 0)
  })

  output$results <- renderTable({
    filtered()
  })
}

# run the app
shinyApp(ui = ui, server = server)

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有