【问题标题】:R shiny Multiple slider inputs based on checkbox inputsR闪亮的基于复选框输入的多个滑块输入
【发布时间】:2018-07-15 02:12:22
【问题描述】:

我已使用以下代码从我的数据创建复选框。我想为从列表中选择的每个复选框创建滑块输入。例如,如果复选框有 4 个变量,如“天空”、“地球”、 water","fire" 如果我​​选择天空,它应该为天空动态打开一个滑块输入,如果我选择水,它应该为水打开另一个滑块输入。我尝试了条件面板,但我的复选框中有超过 50 个变量,所以我无法为所有 50 个变量编写条件。有没有什么通用的方法可以在shiny中使用?

服务器

output$choosedigital=renderUI({

if(is.null(bk$variables))
   return()

checkboxGroupInput("choosemedia", "Choose digital", 
                    choices  = bk$variables,
                    selected = bk$variables)
})


  output$test <- renderUI({
  LL <- list(rep(0,length(input$choosedigital)))     
  for(i in 0:(length(input$choosedigital))) {
   LL[i] <- list(sliderInput(inputId = paste(input$choosedigital,i)
                             , label = paste(input$choosedigital,i), 
  min=0,max=25,value = 5))
  }       
  return(LL)                      
  })

【问题讨论】:

  • 我认为你需要循环使用lapply。请展示一个可重现的小例子
  • bk=mydigital output$choosemedia=renderUI({ if(is.null(bk$variables)) return() checkboxGroupInput("choosemedia", "Choose digital",choices = bk$variables, selected = bk$变量) }) ;滑块输入代码; output$test=renderUI({ if (is.null(input$choosemedia)) return() switch(input$choosemedia, sliderInput("dynamic", "Dynamic", min = 1, max = 20, value = 10)) })
  • 我已经使用 for 循环更新了我的代码。但它仍然无法正常工作。有什么建议吗?

标签: r shiny shiny-server shinydashboard


【解决方案1】:

您希望将滑块输入放在 UI 中的 conditionalPanel 中并设置条件,以便在单击相关复选框时,条件等于 TRUE。

例如

library(shiny)
myData = c("One", "Two", "Three")

ui <- fluidPage(

  checkboxGroupInput("choosemedia", "Choose digital", 
                     choices  = myData,
                     selected = myData),
  textOutput("myText"),
  conditionalPanel(condition = "input.choosemedia.includes('One')", 
                   sliderInput("sliderOne", "Choose your value", min=0, max=100, value=50)
  ),
  conditionalPanel(condition = "input.choosemedia.includes('Two')",
                   sliderInput("sliderTwo", "Choose your other value", 

min=0, max=50, value=25))
    )

# Define server logic 
server <- function(input, output) {
  output$myText <- renderText({input$choosemedia})

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

只要您知道 bk$variables 的内容是什么,您就可以对其进行硬编码,否则您将不得不即时生成这些内容。

希望这些信息足以让您继续前进。

【讨论】:

  • 感谢您的解决方案,但我想要的略有不同。我不想为每个输入编写条件面板,因为我在复选框中有超过 50 个变量。
  • 不能使用循环和 renderUI 生成条件面板吗?我承认我没有去那里冒险。
  • 我想这可能会给你答案:link
  • 我尝试使用链接中给出的代码进行复制 UI 如下 conditionalPanel(condition="input.level==1", sliderInput('clusters', 'Cluster count', 9, min = 1, max = 9)) 服务器输出$test=renderUI({ Tabs
猜你喜欢
  • 2015-05-06
  • 2013-07-14
  • 2016-11-17
  • 2018-03-07
  • 2022-01-15
  • 2017-05-05
  • 2021-08-10
  • 2016-04-04
  • 2021-09-13
相关资源
最近更新 更多