Приведенный ниже пример реализует ваш if-else logi c для selectInput
с использованием renderUI
: 1) он ничего не отображает, пока ни один из переключателей не выбран; 2) показывает опции в list1
, если выбрана кнопка 1 («Вариант 1»); 3) если выбрана кнопка 2 («Вариант 2»), ничего не отображается, пока ни один из флажков не отмечен, отображаются параметры в list2
, если отмечен только флажок 1 («Вариант 3»), параметры в list3
если установлен только флажок 2 («Вариант 4»), и параметры в list4
, если отмечены оба флажка. В вашем примере параметры кода в list5
никогда не будут отображаться, поэтому мне трудно сказать, где вы хотите его разместить, и я проигнорировал его.
library(shiny)
library(shinyWidgets)
list1 = letters[1:3]
list2 = letters[4:6]
list3 = letters[7:9]
list4 = letters[10:12]
ui <- fluidPage(
titlePanel("Dynamic Boxes"),
fluidRow(
prettyRadioButtons("check1", "Please Pick", c("Option 1" = "op1", "Option 2" = "op2"), selected=character(0), shape="square", outline = T, inline = T),
checkboxGroupInput("check2", "Please Pick", c("Option 3" = "op3", "Option 4" = "op4"), inline = T),
uiOutput("select")
)
)
server <- function(input, output){
output$select = renderUI({
req(input$check1)
if (input$check1 == 'op1') {
selectInput('select_1', 'No.1 Select',choices = list1)
}
else if (input$check1 == 'op2') {
req(input$check2)
if (length(input$check2) == 1) {
if(input$check2 == 'op3') {
selectInput('select_2', 'No.2 Select',choices = list2)
}
else if (input$check2 == 'op4') {
selectInput('select_3', 'No.3 Select',choices = list3)
}
}
else if(length(input$check2) == 2){
selectInput('select_4', 'No.4 Select',choices = list4)
}
}
})
}
shinyApp(ui, server)
Я думаю, что комбинация переключателей и флажки, возможно, немного сложны, поскольку на основе меток, показывающих, например, список 4, на самом деле является комбинацией вариантов 2–4. У вас может быть веская причина для такого выбора дизайна, и в этом случае отлично! Но если нет, то, возможно, слегка измененный дизайн, такой как ниже, упростил бы задачу пользователю (и вам самим!).
# Continuing from above ----
ui <- fluidPage(
titlePanel("Dynamic Boxes"),
fluidRow(
prettyRadioButtons("check1", "Please Pick", c("Option 1" = "op1", "Option 2" = "op2"), selected=character(0), shape="square", outline = T, inline = T),
uiOutput("check2"),
uiOutput("select")
)
)
server <- function(input, output) {
output$check2 = renderUI({
req(input$check1)
if (input$check1=='op2') {
prettyRadioButtons("check2", "Please Pick",
c("Option 2.1" = "op3", "Option 2.2" = "op4", "Option 2.3" = "op5"),
selected=character(0), shape="square", outline = T, inline = T)
}
})
output$select = renderUI({
req(input$check1)
if (input$check1 == 'op1') {
selectInput('select_1', 'No.1 Select',choices = list1)
}
else if (input$check1 == 'op2') {
req(input$check2)
if (input$check2 == 'op3') {
selectInput('select_2', 'No.2 Select',choices = list2)
} else if (input$check2== 'op4') {
selectInput('select_3', 'No.3 Select',choices = list3)
} else {
selectInput('select_4', 'No.4 Select',choices = list4)
}
}
})
}
shinyApp(ui, server)
Надеюсь, это поможет!