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
造成的。我不熟悉这个功能,所以我不能进一步评论这一点。您可以改用if
和else
。
非常感谢。我很困惑为什么我使用 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 以更改下拉菜单中的选择
如何在 RMarkdown 中使用 Shiny 进行嵌套选择 selectInput()?