我有很多输入想要过滤数据源。但是,我要渲染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'
答案 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()
。