私のコードは以下にあり、デモサイトはここにあります: 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()))
})