DFFilterStates | R Documentation |
FilterStates
subclass for data framesHandles filter states in a data.frame
.
teal.slice::FilterStates
-> DFFilterStates
teal.slice::FilterStates$clear_filter_states()
teal.slice::FilterStates$format()
teal.slice::FilterStates$get_call()
teal.slice::FilterStates$get_filter_state()
teal.slice::FilterStates$print()
teal.slice::FilterStates$remove_filter_state()
teal.slice::FilterStates$set_filter_state()
teal.slice::FilterStates$srv_active()
teal.slice::FilterStates$srv_add()
teal.slice::FilterStates$ui_active()
teal.slice::FilterStates$ui_add()
new()
Initializes DFFilterStates
object by setting dataname
and initializing state_list
(shiny::reactiveVal
).
This class contains a single state_list
with no specified name,
which means that when calling the subset function associated with this class
(dplyr::filter
), a list of conditions is passed to unnamed arguments (...
).
DFFilterStates$new( data, data_reactive = function(sid = "") NULL, dataname, datalabel = NULL, keys = character(0) )
data
(data.frame
)
the R
object which dplyr::filter
function will be applied on.
data_reactive
(function(sid)
)
should return a data.frame
object or NULL
.
This object is needed for the FilterState
counts being updated on a change in filters.
If function returns NULL
then filtered counts are not shown.
Function has to have sid
argument being a character.
dataname
(character
)
name of the data used in the subset expression.
Passed to the function argument attached to this FilterStates
.
datalabel
(character(1)
) optional
text label.
keys
(character
)
key column names.
clone()
The objects of this class are cloneable with this method.
DFFilterStates$clone(deep = FALSE)
deep
Whether to make a deep clone.
# use non-exported function from teal.slice
include_css_files <- getFromNamespace("include_css_files", "teal.slice")
include_js_files <- getFromNamespace("include_js_files", "teal.slice")
init_filter_states <- getFromNamespace("init_filter_states", "teal.slice")
library(shiny)
library(shinyjs)
# create data frame to filter
data_df <- data.frame(
NUM1 = 1:100,
NUM2 = round(runif(100, min = 20, max = 23)),
CHAR1 = sample(LETTERS[1:6], size = 100, replace = TRUE),
CHAR2 = sample(c("M", "F"), size = 100, replace = TRUE),
DATE = seq(as.Date("2020-01-01"), by = 1, length.out = 100),
DATETIME = as.POSIXct(seq(as.Date("2020-01-01"), by = 1, length.out = 100))
)
data_na <- data.frame(
NUM1 = NA,
NUM2 = NA,
CHAR1 = NA,
CHAR2 = NA,
DATE = NA,
DATETIME = NA
)
data_df <- rbind(data_df, data_na)
# initiate `FilterStates` object
filter_states_df <- init_filter_states(
data = data_df,
dataname = "dataset",
datalabel = ("label")
)
ui <- fluidPage(
useShinyjs(),
include_css_files(pattern = "filter-panel"),
include_js_files(pattern = "count-bar-labels"),
column(4, tags$div(
tags$h4("Active filters"),
filter_states_df$ui_active("fsdf")
)),
column(4, tags$div(
tags$h4("Manual filter control"),
filter_states_df$ui_add("add_filters"), tags$br(),
tags$h4("Condition (i.e. call)"), # display the subset expression generated by this FilterStates
textOutput("call_df"), tags$br(),
tags$h4("Formatted state"), # display human readable filter state
textOutput("formatted_df"), tags$br()
)),
column(4, tags$div(
tags$h4("Programmatic filter control"),
actionButton("button1_df", "set NUM1 < 30", width = "100%"), tags$br(),
actionButton("button2_df", "set NUM2 %in% c(20, 21)", width = "100%"), tags$br(),
actionButton("button3_df", "set CHAR1 %in% c(\"B\", \"C\", \"D\")", width = "100%"), tags$br(),
actionButton("button4_df", "set CHAR2 == \"F\"", width = "100%"), tags$br(),
actionButton("button5_df", "set DATE <= 2020-02-02", width = "100%"), tags$br(),
actionButton("button6_df", "set DATETIME <= 2020-02-02", width = "100%"), tags$br(),
tags$hr(),
actionButton("button7_df", "remove NUM1", width = "100%"), tags$br(),
actionButton("button8_df", "remove NUM2", width = "100%"), tags$br(),
actionButton("button9_df", "remove CHAR1", width = "100%"), tags$br(),
actionButton("button10_df", "remove CHAR2", width = "100%"), tags$br(),
actionButton("button11_df", "remove DATE", width = "100%"), tags$br(),
actionButton("button12_df", "remove DATETIME", width = "100%"), tags$br(),
tags$hr(),
actionButton("button0_df", "clear all filters", width = "100%"), tags$br()
))
)
server <- function(input, output, session) {
filter_states_df$srv_add("add_filters")
filter_states_df$srv_active("fsdf")
output$call_df <- renderPrint(filter_states_df$get_call())
output$formatted_df <- renderText(filter_states_df$format())
observeEvent(input$button1_df, {
filter_state <- teal_slices(teal_slice("dataset", "NUM1", selected = c(0, 30)))
filter_states_df$set_filter_state(state = filter_state)
})
observeEvent(input$button2_df, {
filter_state <- teal_slices(teal_slice("dataset", "NUM2", selected = c(20, 21)))
filter_states_df$set_filter_state(state = filter_state)
})
observeEvent(input$button3_df, {
filter_state <- teal_slices(teal_slice("dataset", "CHAR1", selected = c("B", "C", "D")))
filter_states_df$set_filter_state(state = filter_state)
})
observeEvent(input$button4_df, {
filter_state <- teal_slices(teal_slice("dataset", "CHAR2", selected = c("F")))
filter_states_df$set_filter_state(state = filter_state)
})
observeEvent(input$button5_df, {
filter_state <- teal_slices(
teal_slice("dataset", "DATE", selected = c("2020-01-01", "2020-02-02"))
)
filter_states_df$set_filter_state(state = filter_state)
})
observeEvent(input$button6_df, {
filter_state <- teal_slices(
teal_slice("dataset", "DATETIME", selected = as.POSIXct(c("2020-01-01", "2020-02-02")))
)
filter_states_df$set_filter_state(state = filter_state)
})
observeEvent(input$button7_df, {
filter_state <- teal_slices(teal_slice("dataset", "NUM1"))
filter_states_df$remove_filter_state(filter_state)
})
observeEvent(input$button8_df, {
filter_state <- teal_slices(teal_slice("dataset", "NUM2"))
filter_states_df$remove_filter_state(filter_state)
})
observeEvent(input$button9_df, {
filter_state <- teal_slices(teal_slice("dataset", "CHAR1"))
filter_states_df$remove_filter_state(filter_state)
})
observeEvent(input$button10_df, {
filter_state <- teal_slices(teal_slice("dataset", "CHAR2"))
filter_states_df$remove_filter_state(filter_state)
})
observeEvent(input$button11_df, {
filter_state <- teal_slices(
teal_slice("dataset", "DATE")
)
filter_states_df$remove_filter_state(filter_state)
})
observeEvent(input$button12_df, {
filter_state <- teal_slices(
teal_slice("dataset", "DATETIME", selected = as.POSIXct(c("2020-01-01", "2020-02-02")))
)
filter_states_df$remove_filter_state(filter_state)
})
observeEvent(input$button0_df, filter_states_df$clear_filter_states())
}
if (interactive()) {
shinyApp(ui, server)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.