Learn R Programming

teal.slice (version 0.5.1)

FilterStateExpr: FilterStateExpr R6 class

Description

Sister class to FilterState that handles arbitrary filter expressions.

Arguments

Methods


Method new()

Initialize a FilterStateExpr object.

Usage

FilterStateExpr$new(slice)

Arguments

slice

(teal_slice_expr)

Returns

Object of class FilterStateExpr, invisibly.


Method format()

Returns a formatted string representing this FilterStateExpr object.

Usage

FilterStateExpr$format(show_all = FALSE, trim_lines = TRUE)

Arguments

show_all

(logical(1)) passed to format.teal_slice

trim_lines

(logical(1)) passed to format.teal_slice

Returns

character(1) the formatted string


Method print()

Prints this FilterStateExpr object.

Usage

FilterStateExpr$print(...)

Arguments

...

arguments passed to the format method

Returns

NULL, invisibly.


Method get_state()

Returns a complete description of this filter state.

Usage

FilterStateExpr$get_state()

Returns

A teal_slice object.


Method set_state()

Does nothing. Exists for compatibility.

Usage

FilterStateExpr$set_state(state)

Arguments

state

(teal_slice)

Returns

self, invisibly.


Method get_call()

Get reproducible call.

Usage

FilterStateExpr$get_call(dataname)

Arguments

dataname

(ignored) for a consistency with FilterState

Returns reproducible condition call for current selection relevant for selected variable type. Method is using internal reactive values which makes it reactive and must be executed in reactive or isolated context.

Returns

call or NULL


Method destroy_observers()

Destroy observers stored in private$observers.

Usage

FilterStateExpr$destroy_observers()

Returns

NULL, invisibly.


Method server()

shiny module server.

Usage

FilterStateExpr$server(id)

Arguments

id

(character(1)) shiny module instance id.

Returns

Reactive expression signaling that the remove button has been clicked.


Method ui()

shiny module UI. The UI for this class contains simple message stating that it is not supported.

Usage

FilterStateExpr$ui(id, parent_id = "cards")

Arguments

id

(character(1)) shiny module instance id.

parent_id

(character(1)) id of the FilterStates card container.


Method clone()

The objects of this class are cloneable with this method.

Usage

FilterStateExpr$clone(deep = FALSE)

Arguments

deep

Whether to make a deep clone.

Details

Creates a filter state around a predefined condition call (logical predicate). The condition call is independent of the data and the filter card allows no interaction (the filter is always fixed).

Examples

Run this code
# use non-exported function from teal.slice
include_js_files <- getFromNamespace("include_js_files", "teal.slice")
include_css_files <- getFromNamespace("include_css_files", "teal.slice")
FilterStateExpr <- getFromNamespace("FilterStateExpr", "teal.slice")

filter_state <- FilterStateExpr$new(
  slice = teal_slice(
    dataname = "x",
    id = "FA",
    title = "Adult females",
    expr = "sex == 'F' & age >= 18"
  )
)
filter_state$get_call()

# working filter in an app
library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  include_css_files(pattern = "filter-panel"),
  include_js_files(pattern = "count-bar-labels"),
  column(4, tags$div(
    tags$h4("ChoicesFilterState"),
    filter_state$ui("fs")
  )),
  column(8, tags$div(
    tags$h4("Condition (i.e. call)"), # display the condition call generated by this FilterState
    textOutput("condition_choices"), tags$br(),
    tags$h4("Unformatted state"), # display raw filter state
    textOutput("unformatted_choices"), tags$br(),
    tags$h4("Formatted state"), # display human readable filter state
    textOutput("formatted_choices"), tags$br()
  ))
)

server <- function(input, output, session) {
  filter_state$server("fs")
  output$condition_choices <- renderPrint(filter_state$get_call())
  output$formatted_choices <- renderText(filter_state$format())
  output$unformatted_choices <- renderPrint(filter_state$get_state())
}

if (interactive()) {
  shinyApp(ui, server)
}

Run the code above in your browser using DataLab