在条件面板中使用多个选择元素

时间:2014-02-27 09:21:03

标签: r shiny

我想根据多选输入的所选项目数显示我的闪亮应用程序的内容。到目前为止,我无法弄清楚使这项工作的条件应该是什么样的。

library(shiny)

shinyUI(pageWithSidebar(
  headerPanel("select and conditional panel"),
  sidebarPanel(
    selectInput(inputId = "someSelect", multiple=TRUE, label = "Genes:", choices = colnames(someDataFrame), selected = c("ESR1", "CD44")),
  ),
  mainPanel(
    conditionalPanel(
      condition="length(input.someSelect.selected) > 2",
      tabsetPanel(
...
      )
    )
  )
))

3 个答案:

答案 0 :(得分:6)

这可能是一个品味问题,但我不喜欢conditionalPanel构造,因为它将javascript逻辑输入到R代码中。相反,我更喜欢可以生成动态UI的uiOutput(和相应的renderUI)。虽然conditionalPanel只能处理相当简单的条件,但动态UI方法可以创建基于更复杂逻辑的条件外观,并且可以利用R的强大功能。 然而,响应变化的速度稍慢。

如果您使用这种方法,您的ui.r应该类似于:

mainPanel(uiOutput("myConditionalPanel"))

并且您的server.r看起来像:

output$myConditionalPanel = renderUI({
    if(length(input$someSelect)>2) {
         ## some ui definitions here. for example
         tabsetPanel(
             ...
         )
     } else {
         ## some alternative definitions here...
     }
})

答案 1 :(得分:4)

您不能在条件面板的条件中使用R函数。我认为你的情况应该是:input.someSelect.length > 2

答案 2 :(得分:4)

希望这有助于其他人遇到同样的问题...

使用上面的答案我在尝试使conditionPanel仅在selectInput中选择了2个或更多项时出现时遇到问题。 uiOutput / renderUi方法有问题,条件input.someSelect.length > 1即使在selectInput中没有选择任何内容时,条件面板也会出现。

使用conditionPanel,我需要包含一个条件来检查是否定义了selectInput:
"input.someSelect != undefined && input.someSelect.length > 1"