Я нашел решение в первом ответе на этот вопрос ( checkboxGroupInput - установить минимальное и максимальное количество выборов - отметки ) не работает должным образом. Воспроизводимый пример выглядит следующим образом:
rm(list = ls())
library(shiny)
my_min <- 1
my_max <- 3
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
checkboxGroupInput("SelecetedVars", "MyList:",paste0("a",1:5), selected = "a1")
),
mainPanel(textOutput("Selected"))
)
)
server <- function(input, output,session) {
output$Selected <- renderText({
paste(input$SelecetedVars,collapse=",")
})
observe({
if(length(input$SelecetedVars) > my_max)
{
updateCheckboxGroupInput(session, "SelecetedVars", selected= tail(input$SelecetedVars,my_max))
}
if(length(input$SelecetedVars) < my_min)
{
updateCheckboxGroupInput(session, "SelecetedVars", selected= "a1")
}
})
}
shinyApp(ui = ui, server = server)
При выборе флажков при go внизу списка новые выделения добавляются к хвосту входного вектора $ SelectedVars и, следовательно, к хвосту (input $ SelecetedVars, my_max) ) возвращает последние три переменные, выбранные пользователем. Однако, когда вы go создаете резервную копию списка, переменные добавляются к заголовку входного вектора $ SelectedVars, поэтому tail (input $ SelecetedVars, my_max) продолжает возвращать уже выбранные переменные.
Мой текущий патч - добавить заметку в мое приложение, в которой говорится, что одновременно можно выбрать только три переменные. Однако это зависит от того, что пользователь понимает, что он должен самостоятельно проверять переменные. Поэтому для простоты мне интересно, есть ли способ добавить самый последний выбранный var для добавления к хвосту вектора, чтобы вы всегда могли отобразить последние переменные, выбранные пользователем.