Несколько условий в блестящей приборной панели - PullRequest
0 голосов
/ 05 марта 2019

Ниже приведен пример, но в данной ситуации у меня есть много условий, которые нужно передать, и я не хочу использовать оператор 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))

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Лучше не создавать объекты постоянно, используя 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))

enter image description here

0 голосов
/ 05 марта 2019

Предполагая, что 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...