надеюсь, что это поможет.
файл UI.R
library(shinyBS)
library(shiny)
shinyUI(fluidPage(
# input control for first choice
selectInput("first_choice",
label = h1("First Answer a General Question"),
choices = list("select","A","B","C"),
selected = "select"
),
#collapsable panel for second choice
h1("then get into details"),
bsCollapse(
bsCollapsePanel(title = "details",
uiOutput("second_choice")
),
id = "collapser", multiple = FALSE, open = NULL
),
h2("first answer"),
h3(textOutput("first_answer")),
h2("second answer"),
h3(textOutput("second_answer"))
))
файл server.R
library(shiny)
shinyServer(function(input, output,session) {
#retrieve selected values and render text from selection
output$first_answer <- renderText({input$first_choice})
output$second_answer <- renderText({input$dynamic})
output$second_choice <- renderUI({
switch(input$first_choice,
"A" = checkboxGroupInput("dynamic", "Dynamic",
choices = c("Aragon","Frodo"),
selected = "option2"),
"B" = checkboxGroupInput("dynamic", "Dynamic",
choices = c("Bilbo","Gandalf","Sauron"),
selected = "option2"),
"C" = checkboxGroupInput("dynamic", "Dynamic",
choices = c("Boromir","Legolas"),
selected = "option2")
)
})
#observe function in order to open the collapsable panel when the first answer is given
observe({
if (input$first_choice != "select") {
updateCollapse(session,"collapser",open = c('details'))
}
})
})
этот результат в следующем блестящем приложении:
, где второе меню открывается только после того, как сначала получите ответ, а варианты второго вопроса - d ynamically изменилось на основе первого ответа. выбранных ответов присваивается first_answer и second_answer.
Обратите внимание на использование пакета shinyBS для складываемой панели.
Вы можете найти более динамические изменения пользовательского интерфейса в следующем Rstudio источников: http://shiny.rstudio.com/articles/dynamic-ui.html
http://shiny.rstudio.com/gallery/dynamic-ui.html
спасибо, на самом деле вопрос с каждым первым выбором, количество второго выбора изменяется. Здесь вы назначили 3 варианта с каждым первым выбором, но мне захотелось 4 варианта с процентом белого, 2 варианта с процентом черного и так далее ..... Возможно ли это? !! –
Это должно быть то, что вы искали. Обратите внимание, что динамическое изменение стало возможным благодаря функции renderUI() и функции switch(). Узнайте больше об этих функциях в цитированных источниках и документации R. –