在输入为向量的闪亮条件下使用conditionalpanel

时间:2018-12-10 15:52:24

标签: shiny shinydashboard

我有很多输入想要过滤数据源。但是,我要渲染100多个输入,但我希望在任何时间点只能使用少数几个输入。

我不想呈现所有内容,以防万一,因为这可能会使页面混乱并且难以导航。我希望制作所有的小部件,并使用conditionalpanel在显示它之前先检查它是否出现在列表中。

我遇到的问题是,在conditionalpanel中的条件参数中,%in%运算符似乎看不到它,它没有给我一个错误-只是不起作用。

我在下面做了一个轻量级的例子:

# libs ----
library(shiny)
library(shinydashboard)

# header ----
header <- dashboardHeader(title = "Example")

#sidebar ----
sidebar <- dashboardSidebar(disable = T)

#body ----
body <- dashboardBody(

  fluidRow(
    column(
      width = 12,
      selectInput(
        inputId = "control", 
        label = "choose something:",
        choices = c("a", 
                    "b", 
                    "c", 
                    "d", 
                    "e"),
        multiple = TRUE
      )
    )
  ),

  conditionalPanel(
    condition = "'a' %in% input.control",
    textInput(inputId = "bla", label = "aaaaa")
  ),

  conditionalPanel(
    condition = "'b' %in% input.control",
    textInput(inputId = "ble", label = "bbbbb")
  )

)

# all ui ----
ui <- dashboardPage(
  header = header, 
  sidebar = sidebar, 
  body = body
)

# server ----
server = shinyServer(function(input, output) {


})


# Run the application 
shinyApp(ui = ui, server = server)

我无法找到解决此问题的方法,感谢您的帮助!

谢谢

编辑-已解决 条件是一个JS表达式(感谢@edavidaja的帮助),当我尝试使用时: condition = 'input.control.includes("a")'失败。 因此与我的JS开发同事一起制定了解决方案,并通过...获得了解决方案。 condition = 'input.control && input.control.indexOf("a") > -1'

1 个答案:

答案 0 :(得分:0)

从帮助中:

condition   
A JavaScript expression that will be evaluated repeatedly to determine whether the 
panel should be displayed.

%in是R表达式,而不是JavaScript表达式,因此可能需要includes之类的东西。

此外,如果您要渲染的东西有数百种,则可以考虑使用renderUI()/uiOutput()