2015-11-19 2 views
1

У меня есть блестящее приложение с несколькими входами, которые принадлежат иерархии (A -> B -> C). Когда пользователь выбирает A - он должен влиять на параметры в B и C. Однако пользователь может выбрать только B (а затем он должен влиять и на другие входы. Если ничего не выбрано - все параметры должны быть доступны. Как его реализовать?Блестящий updateSelectInput для нескольких входов

ответ

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 }) 
    } 
) 

cascading selects

+0

Jason + @ Boxuan - Нужно ли определять все возможные случаи? (если пользователь выбирает A, он должен влиять на значения в B и C, тогда, если он выбирает C, он также должен влиять на B и т. д.). Также - в чем основное отличие использования renderUI/наблюдения? – Userrrrrrrr

+0

@UserIL * Это зависит * - вы действительно не предоставили достаточной информации для того, чтобы кто-нибудь мог ответить на ваш вопрос. Другим легче помочь, если вы продемонстрируете код, который вы пытаетесь и проиллюстрируете ожидаемым результатом. Для различий между 'renderUI' и' наблюдать' см .: [this] (http://shiny.rstudio.com/reference/shiny/latest/renderUI.html) и [это] (http://shiny.rstudio.com /reference/shiny/latest/observe.html). – JasonAizkalns