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