shinyfilters makes it easy to create Shiny inputs from vectors, data.frames, and more.
filterInput(): Create filter inputs on any objectupdateFilterInput(): Update filter inputsserverFilterInput(): Server logic to update filter
inputsapply_filters(): Apply filter inputs to objectsYou can install the development version from Github:
pak("joshwlivingston/shinyfilters")library(shinyfilters)
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
#############################################
# Create a filterInput() inside a shiny app:
filterInput(
x = letters,
id = "letter",
label = "Pick a letter:"
)
#############################################
),
mainPanel(
textOutput("selected_letter")
)
)
)
server <- function(input, output, session) {
output$selected_letter <- renderText({
paste("You selected:", input$letter)
})
}
shinyApp(ui, server)library(shinyfilters)
library(DT)
library(shiny)
df <- data.frame(
x = letters,
y = sample(c("red", "green", "blue"), 26, replace = TRUE),
z = round(runif(26, 0, 3.5), 2),
q = sample(Sys.Date() - 0:7, 26, replace = TRUE)
)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
#############################################################
# 1. Create a filterInput() for each column in a data.frame:
filterInput(
x = df,
range = TRUE,
selectize = TRUE,
slider = TRUE,
multiple = TRUE
)
#############################################################
),
mainPanel(
DTOutput("df_full"),
verbatimTextOutput("input_values"),
DTOutput("df_filt")
)
)
)
server <- function(input, output, session) {
output$df_full <- renderDT(datatable(df))
################################################################
# 2. Create a server to manage the data.frame's filterInput()'s
res <- serverFilterInput(
x = df,
input = input,
range = TRUE
)
################################################################
#####################################################
# 3. Use the server's results
output$input_values <- renderPrint(res$input_values)
output$df_filt <- renderDT(datatable(
apply_filters(df, res$input_values)
))
#####################################################
}
shinyApp(ui, server)You can extend shinyfilters by adding or overwriting
methods to the following:
filterInput(), updateFilterInput()args_filter_input(),
args_update_filter_input()get_filter_logical()See vignette("customizing-shinyfilters") for more.