2015-08-17 2 views
2

Я пытаюсь выяснить, как использовать conditionalPanel в Shiny, чтобы удалить опции из checkboxGroupInput на основе того, что выбрано на sliderInput.conditionalPanel Shiny to Hide Check Box options

Ниже мой код: ui.R

library(shiny) 

shinyUI(fluidPage(
     titlePanel("XXXXX"), 
     sidebarLayout(
       sidebarPanel(
         checkboxGroupInput("product.input", label = "Labels", 
              choices=c("Product A"="P1", 
                "Product B"="P2", 
                "Product C"="P3", 
                "Product D"="P4", 
                "Product E"="P5", 
                "Product F"="P6"), 
              selected=c("P1", "P2","P3","P4","P5","P6")), 

         sliderInput("prod.input", 
            label = "Select Month", 
            sep="", 
            min =1 , max = 12, value = c(5,8),step=1), 
         conditionalPanel(condition="prod.input<5", 
             checkboxGroupInput("product.input", label = "Labels", 
                  choices=c("Product A"="P1", 
                     "Product B"="P2", 
                     "Product E"="P5", 
                     "Product F"="P6")))), 
     mainPanel((tabsetPanel(
       tabPanel("Table1",h2("Table Header"),tableOutput("figure")))))))) 

server.R

shinyServer(function(input, output) { 
     output$figure <- renderPlot({ 
     }) 
} 
) 

Когда входной слайдер меньше 5, я хочу двух флажков "Продукт C" и " Продукт D "исчезнет. Когда я использую conditionalPanel, появляется новый список вместо того, который обновляется. Любые выводы о том, как я могу это исправить, будут очень признательны.

Спасибо!

ответ

0

Я не уверен, как изменить checkboxGroupInput с помощью conditionalPanel, но это довольно просто, если вы используете renderUI:

ui.R

uiOutput('product.input') 

server.R

output$product.input <- renderUI({ 
    allchoices <- c("Product A" = "P1", "Product B" = "P2", "Product C" = "P3", 
        "Product D" = "P4", "Product E" = "P5", "Product F" = "P6") 
    if(input$prod.input[2] < 5) allchoices <- allchoices[-c(3:4)] 

    checkboxGroupInput("product.input", label = "Labels", choices = allchoices, 
         selected = allchoices) 
}) 

ps .: Я не уверен, но я думаю, что после того, как вы указали «ввод-объект» в ui, вы не можете его изменить. Если вы будете использовать условную панель, вам, вероятно, придется объявить два из них, каждый из которых имеет одну из возможных деклараций «product.input».

2

Мне кажется, что вы можете решить свою проблему, используя updateCheckboxGroupInput (см. Shiny reference).