posit::conf (2026)
Josh Livingston




# server.R
filtered_data <- reactive({
data <- winners
if (!is.null(input$year)) {
data <- data |>
filter(year >= input$year[1], year <= input$year[2])
}
if (!is.null(input$rank)) {
data <- data |>
filter(rank %in% input$rank)
}
...
})
observe({
updateNumericInput(
"year",
min = min(filtered_data()$year),
max = max(filtered_data()$year)
)
updateSelectInput(
"rank",
choices = unique(filtered_data()$rank)
)
...
})
posit::conf (2026)
Josh Livingston
Interdepdent filters made easy


# server.R
filtered_data <- reactive({
data <- winners
if (!is.null(input$year)) {
data <- data |>
filter(year >= input$year[1], year <= input$year[2])
}
if (!is.null(input$rank)) {
data <- data |>
filter(rank %in% input$rank)
}
...
})
observe({
updateNumericInput(
"year",
min = min(filtered_data()$year),
max = max(filtered_data()$year)
)
updateSelectInput(
"rank",
choices = unique(filtered_data()$rank)
)
...
})filterInput() on a data.frame.filterInput() on a data.frame.serverFilterInput() in the server.filterInput() on a data.frame.serverFilterInput() in the server.
# server.R
filtered_data <- reactive({
data <- winners
if (!is.null(input$year)) {
data <- data |>
filter(year >= input$year[1], year <= input$year[2])
}
if (!is.null(input$rank)) {
data <- data |>
filter(rank %in% input$rank)
}
...
})
observe({
updateNumericInput(
"year",
min = min(filtered_data()$year),
max = max(filtered_data()$year)
)
updateSelectInput(
"rank",
choices = unique(filtered_data()$rank)
)
...
})?filterInput?filterInput
filterInput().filterInput().filterInput().filterInput().
args_filter_input()args_filter_input()args_filter_input()args_filter_input()



Questions?