闪亮仪表板中的多个条件
Posted
技术标签:
【中文标题】闪亮仪表板中的多个条件【英文标题】:Multiple Condition in Shiny Dashboard 【发布时间】:2019-07-26 14:44:35 【问题描述】:下面是一个例子,但在目前的情况下,我有很多条件要通过,我不想使用 if 语句。如果我能完成工作,有没有其他不使用的方法。
代码
library(shiny)
ui = fluidPage(
selectInput('p_id','ID:', c(111,222,333)),
uiOutput('uiID')
)
server = function(input, output, session)
maxdays <- reactive(
if(input$p_id %in% c(111))
x = 1
else
if(input$p_id %in% c(222))
x = 2
else
x = 3
return(x)
)
output$uiID <- renderUI(
selectInput('days','Days:', choices=seq(1,maxdays()))
)
runApp(shinyApp(ui = ui, server = server))
【问题讨论】:
v <- c(111,222,333); which(v==111); which(v==222)
您的示例确实有效。这不是编写 if else 语句的最佳方式,但仍然如此。为什么不想使用 if 语句?
@Wilmar van Ommeren。我现在的情况是,如果我使用 if 条件,那么我必须写大约 700 个 if 条件,那么只有我才能得到准确的输出。我不想这样做,因为我觉得这不是正确的方法。如果您有任何建议,请告诉我。
【参考方案1】:
假设maxdays
基本上返回您的selectInput
选择的位置,您可以执行以下操作:
library(shiny)
my_choices <- c(111, 222, 333)
ui <- fluidPage(
selectInput('p_id', 'ID:', my_choices),
uiOutput('uiID')
)
server <- function(input, output, session)
maxdays <- reactive(which(my_choices %in% input$p_id))
output$uiID <- renderUI(
selectInput('days', 'Days:', choices = seq(1,maxdays()))
)
shinyApp(ui, server)
【讨论】:
【参考方案2】:最好不要一直使用renderUI
重新创建对象,而是我们可以简单地更新小部件:
library(shiny)
data <- c(111,222,333)
ui <- fluidPage(
selectInput('p_id','ID:', data),
selectInput('days','Days:', choices = NULL)
)
server = function(input, output, session)
observeEvent(input$p_id,
mseq <- seq(1,which(data %in% input$p_id))
updateSelectInput(session,"days","Days:",choices = mseq)
)
runApp(shinyApp(ui = ui, server = server))
【讨论】:
以上是关于闪亮仪表板中的多个条件的主要内容,如果未能解决你的问题,请参考以下文章