我想根据多选输入的所选项目数显示我的闪亮应用程序的内容。到目前为止,我无法弄清楚使这项工作的条件应该是什么样的。
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(
...
)
)
)
))
答案 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"