2

私のコードは以下にあり、デモサイトはここにあります: http://glimmer.rstudio.com/kdavenport/test1/

最初の入力 (ドロップダウン) は、global.R で定義されたデータフレームをロードします。

2 番目の入力 (ドロップダウン) は、df の「サービス」列によってこのデータフレームをフィルタリングします

3 番目の入力 (チェックボックス) は、df の「ラウンド」列によってデータフレームをさらにフィルタリングします

問題は、ステップ 2 で「サービス」でフィルタリングした後に使用できるチェックボックスではなく、ステップ 1 でデータフレームに使用できるすべてのチェックボックスが表示されることです。

shinyServer(function(input, output) {

  # First UI input (Service column) filter clientData 
  output$serviceControls <- renderUI({
    if (is.null(clientData()))
      return("No client selected")
    selectInput("service_select", 
                "Choose Service:", 
                choices = as.character(levels(clientData()$Service.Name)),
                selected = input$service_select
    )
  })

  # Second UI input (Rounds column) filter service-filtered clientData  
  output$roundControls <- renderUI({
    if (is.null(serviceFiltered_clientData()))
      return("No service selected")
    checkboxGroupInput("round_select", 
                       "Choose Round:", 
                       choices = as.character(levels(serviceFiltered_clientData()$Round)))
  })  

  # First data load (client data)
  clientData <- reactive({
    if (is.null(input$client_select))
      return(NULL)
    get(input$client_select)
  })

  # Second data load (filter by service column)
  serviceFiltered_clientData <- reactive({
    dat <- clientData()
    if (is.null(dat))
      return(NULL)
    if (!is.null(input$service_select)) # !
      dat <- dat[dat$Service.Name %in% input$service_select,]
    return(dat)
  })

  # Third data load (filter by round column)
  roundFiltered_clientData <- reactive({
    dat <- serviceFiltered_clientData()
    if (is.null(dat))
      return(NULL)
    if (!is.null(input$round_select)) # !
      dat <- dat[dat$Round %in% input$round_select,]
    return(dat)
  })


  # Audit count panel
  output$auditsCount <- renderText({
    if (is.null(roundFiltered_clientData()))
      return("No client selected")
    paste("Total Audits:",nrow(roundFiltered_clientData()))
  })
4

2 に答える 2

1

これを修正するには、checkboxInputs をグループ化し、conditionalPanelを使用して、必要に応じて選択的に表示および非表示にします。

手順:

  1. サービスによるフィルタリングの各ケースについて、意味のあるチェックボックスの動的リストを作成します。
  2. ドロップダウン #2 (サービス) の選択に基づいて、条件を作成します。
  3. 条件に一致するチェックボックスの選択肢のみを表示します。

疑似コード

# Only show this panel if a certain Service is selected
      conditionalPanel(
         condition = "input.service.option == 'filter2'",
         checkboxInput(inputId = "opt.col1", label = "label1", value = FALSE),
         checkboxInput(inputId = "opt.col3", label = "label3", value = FALSE),
         )

RStudio 関係者によるこの例とそれに付随するコードを参照してください。(特に、複数の conditionalPanel が使用されている UI.R のコードの一部。)

于 2013-09-06T17:41:23.563 に答える