У меня есть блестящее приложение с несколькими входами, которые принадлежат иерархии (A -> B -> C). Когда пользователь выбирает A - он должен влиять на параметры в B и C. Однако пользователь может выбрать только B (а затем он должен влиять и на другие входы. Если ничего не выбрано - все параметры должны быть доступны. Как его реализовать?Блестящий updateSelectInput для нескольких входов
1
A
ответ
0
Существует не хватает информации здесь. Тем не менее, от того, что вы описали, вы могли бы попробовать, начиная отсюда.
shinyServer(function(input, output, session) {
observe({
a_option <- input$a_option
b_option <- input$b_option
if (a_option == "XXX") {
updateSelectInput(session, "B", choices = b_options)
updateSelectInput(session, "C", choices = c_options)
}
if (b_option == "XXX") {
updateOtherInput(session, "input_id", ...)
}
})
})
1
Согласовано, что вам нужно больше информации, а также observe
модель может быть хорошим выбором. Если вы требуется больше контроля и динамики в интерфейсе, вы можете использовать динамический интерфейс с renderUI
:
library(shiny)
choices_A <- list("Choice A" = 1, "Choice B" = 2, "Choice C" = 3)
choices_B <- list("Choice B1" = 4, "Choice B2" = 5, "Choice B3" = 6)
choices_C <- list("Choice C1" = 7, "Choice C2" = 8, "Choice C3" = 9)
shinyApp(
ui = fluidPage(
titlePanel("Cascading selects"),
fluidRow(
column(3, wellPanel(
selectInput("select_A", label = "Select A",
choices = choices_A)
)),
column(3, wellPanel(
uiOutput("ui")
)),
column(3, wellPanel(
tags$p("First Input: "),
verbatimTextOutput("value"),
tags$p("Dynamic Input: "),
verbatimTextOutput("dynamic_value")
))
)
),
server = function(input, output) {
output$ui <- renderUI({
if (is.null(input$select_A))
return()
switch(input$select_A,
"1" = selectInput("dynamic", label = "Select A2",
choices = choices_A),
"2" = selectInput("dynamic", label = "Select B",
choices = choices_B),
"3" = selectInput("dynamic", label = "Select C",
choices = choices_C)
)
})
output$value <- renderPrint({ input$select_A })
output$dynamic_value <- renderPrint({ input$dynamic })
}
)
Jason + @ Boxuan - Нужно ли определять все возможные случаи? (если пользователь выбирает A, он должен влиять на значения в B и C, тогда, если он выбирает C, он также должен влиять на B и т. д.). Также - в чем основное отличие использования renderUI/наблюдения? – Userrrrrrrr
@UserIL * Это зависит * - вы действительно не предоставили достаточной информации для того, чтобы кто-нибудь мог ответить на ваш вопрос. Другим легче помочь, если вы продемонстрируете код, который вы пытаетесь и проиллюстрируете ожидаемым результатом. Для различий между 'renderUI' и' наблюдать' см .: [this] (http://shiny.rstudio.com/reference/shiny/latest/renderUI.html) и [это] (http://shiny.rstudio.com /reference/shiny/latest/observe.html). – JasonAizkalns