2

我试图弄清楚如何conditionalPanel在 Shiny 中checkboxGroupInput根据在sliderInput.

下面是我的代码: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"))))))))

服务器.R

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

当滑块输入小于 5 时,我希望“产品 C”和“产品 D”这两个复选框消失。当我使用 conditionalPanel 时,会出现一个新列表,而不是更新同一个列表。任何有关我如何解决此问题的线索将不胜感激。

谢谢!

4

2 回答 2

2

在我看来,您可以通过使用来解决您的问题updateCheckboxGroupInput(请参阅Shiny reference)。

于 2015-08-19T14:08:10.263 回答
0

我不确定如何使用 conditionalPanel 更改 checkboxGroupInput,但如果您使用 renderUI,这非常简单:

用户界面

uiOutput('product.input')

服务器.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.:我不确定,但我认为一旦你在用户界面中声明了一个“输入对象”,你就无法真正改变它。如果您要使用 conditionalPanel,您可能必须声明其中两个,每个都带有可能的“product.input”声明之一。

于 2015-08-17T22:04:48.107 回答