Shiny - 更改 selectInput() 中的选项数量

Posted

技术标签:

【中文标题】Shiny - 更改 selectInput() 中的选项数量【英文标题】:Shiny - Changing the number of choices in selectInput() 【发布时间】:2021-07-12 07:31:53 【问题描述】:

我想更改 selectInput() 中的选项数。如果新选择的数量与原始选择的数量相同,则以下表示有效,但如果提供了更多(或更少)选择,则代码不起作用。我怎样才能变得闪亮,不仅接受 selectInput() 的新选择,而且接受新的选择数量?提前感谢您的帮助。

菲利普


    library(shiny)
    ui <- fluidPage(
      tabPanel("tbls",
        selectInput("tab1",label="Pick a table:",choices=c("a","b","c")),
        selectInput("cht1",label="Pick a time series:",choices=c("d","e","f"))
      )
    )
    server <- function(input,output,session) 
      Nchoices <- reactive(case_when(
        input$tab1=="a" ~c("d","e","f"),
        input$tab1=="b" ~c("g","h","i"),
        input$tab1=="c" ~c("j","k","l","m") # adding one more choice breaks the code
      )) 
      observe(updateSelectInput(session,"cht1",
        label="Pick a time series:",choices=Nchoices(),selected=NULL))
      observe(print(Nchoices()))
    
    
    shinyApp(ui, server)

【问题讨论】:

选择的数量没有问题。该错误是由于滥用case_when 造成的。我不熟悉这个功能,所以我不能进一步评论这一点。您可以改用ifelse 非常感谢。我很困惑为什么我使用 case_when() 是错误的,但是当我按照你的建议使用 if...else 时,代码确实可以正常工作。 【参考方案1】:

尝试使用switch,而不是case_when。此外,renderUI 可能有用。试试这个

library(shiny)
ui <- fluidPage(
  tabPanel("tbls",
           selectInput("tab1",label="Pick a table:",choices=c("a","b","c")),
           uiOutput("myselect")
           #selectInput("cht1",label="Pick a time series:",choices=c("d","e","f"))
  )
)
server <- function(input,output,session) 
  
  Nchoices <- reactive(
    switch(input$tab1, 
           "a" = c("d","e","f"),
           "b" = c("g","h"),
           "c" = c("j","k","l","m") # adding one more choice breaks the code
    )
  )
  
  output$myselect <- renderUI(
    req(input$tab1)
    selectInput("cht1",label="Pick a time series:",choices=Nchoices())
  )
 
  observe(print(Nchoices()))
  

shinyApp(ui, server)

请注意,case_when 中的所有 RHS 值都必须属于同一类型。不一致的类型会抛出错误。

【讨论】:

以上是关于Shiny - 更改 selectInput() 中的选项数量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 actionButton 更改 R Shiny 中 selectInput 上的选定值?

R Shiny、Leaflet 的问题 --> SelectInput 以更改下拉菜单中的选择

R / Shiny selectInput小部件大小

如何在 RMarkdown 中使用 Shiny 进行嵌套选择 selectInput()?

selectInput 选择依赖于 R Shiny Flexdashboard 的另一个 selectInput

Shiny:根据 selectInput 选择动态分配 var 名称