FilteredData {teal.slice} | R Documentation |
Class to encapsulate filtered datasets
Description
Manages filtering of all datasets in the application or module.
Details
The main purpose of this class is to provide a collection of reactive datasets, each dataset having a filter state that determines how it is filtered.
For each dataset, get_filter_expr
returns the call to filter the dataset according
to the filter state. The data itself can be obtained through get_data
.
The datasets are filtered lazily, i.e. only when requested / needed in a shiny
app.
By design, any dataname
set through set_dataset
cannot be removed because
other code may already depend on it. As a workaround, the underlying
data can be set to NULL
.
The class currently supports variables of the following types within datasets:
-
choices
: variable of typefactor
, e.g.ADSL$COUNTRY
,iris$Species
zero or more options can be selected, when the variable is a factor -
logical
: variable of typelogical
, e.g.ADSL$TRT_FLAG
exactly one option must be selected,TRUE
orFALSE
-
ranges
: variable of typenumeric
, e.g.ADSL$AGE
,iris$Sepal.Length
numerical range, a range within this range can be selected -
dates
: variable of typeDate
,POSIXlt
Other variables cannot be used for filtering the data in this class.
Common arguments are:
-
filtered
: whether to return a filtered result or not -
dataname
: the name of one of the datasets in thisFilteredData
object -
varname
: one of the columns in a dataset
Methods
Public methods
Method new()
Initialize a FilteredData
object.
Usage
FilteredData$new(data_objects, join_keys = teal.data::join_keys())
Arguments
data_objects
(
named list
) List of data objects. Names of the list will be used asdataname
for respective datasets.join_keys
(
join_keys
) optional joining keys, seeteal.data::join_keys()
.
Method datanames()
Gets datanames
.
Usage
FilteredData$datanames()
Details
The datanames
are returned in the order in which they must be evaluated (in case of dependencies).
Returns
Character vector.
Method get_datalabel()
Gets data label for the dataset.
Useful to display in Show R Code
.
Usage
FilteredData$get_datalabel(dataname)
Arguments
dataname
(
character(1)
) name of the dataset
Returns
Character string.
Method set_available_teal_slices()
Set list of external filter states available for activation.
Usage
FilteredData$set_available_teal_slices(x)
Arguments
x
(
reactive
) should returnteal_slices
Details
Unlike adding new filter from the column, these filters can come with some prespecified settings.
teal_slices
are wrapped in a reactive
so they can be updated from elsewhere in the app.
Filters passed in x
are limited to those that can be set for this FilteredData
object,
i.e. they have the correct dataname
and varname
(waived teal_slice_fixed
as they do not have varname
).
List is accessible in ui/srv_active
through ui/srv_available_filters
.
Returns
NULL
, invisibly.
Method get_available_teal_slices()
Get list of filter states available for this object.
Usage
FilteredData$get_available_teal_slices()
Details
All teal_slice
objects that have been created since the beginning of the app session
are stored in one teal_slices
object. This returns a subset of that teal_slices
,
describing filter states that can be set for this object.
Returns
reactive
that returns teal_slices
.
Method get_call()
Gets a call
to filter the dataset according to the filter state.
Usage
FilteredData$get_call(dataname)
Arguments
dataname
(
character(1)
) name of the dataset
Details
It returns a call
to filter the dataset only, assuming the
other (filtered) datasets it depends on are available.
Together with self$datanames()
which returns the datasets in the correct
evaluation order, this generates the whole filter code, see the function
FilteredData$get_filter_code
.
For the return type, note that rlang::is_expression
returns TRUE
on the
return type, both for base R
expressions and calls (single expression,
capturing a function call).
The filtered dataset has the name given by self$filtered_dataname(dataname)
This can be used for the Show R Code
generation.
Returns
A list of call
s.
Method get_data()
Gets filtered or unfiltered dataset.
For filtered = FALSE
, the original data set with set_data
is returned including all attributes.
Usage
FilteredData$get_data(dataname, filtered = TRUE)
Arguments
dataname
(
character(1)
) name of the dataset.filtered
(
logical(1)
) whether to return a filtered or unfiltered dataset.
Returns
A data object, a data.frame
or a MultiAssayExperiment
.
Method get_join_keys()
Get join keys between two datasets.
Usage
FilteredData$get_join_keys()
Returns
join_keys
Method get_filter_overview()
Creates filter overview table to be displayed in the application.
One row is created per dataset, according to the get_filter_overview
methods
of the contained FilteredDataset
objects.
Usage
FilteredData$get_filter_overview(datanames)
Arguments
datanames
(
character
) vector of dataset names.
Returns
A data.frame
listing the numbers of observations in all datasets.
Method get_keys()
Get keys for the dataset.
Usage
FilteredData$get_keys(dataname)
Arguments
dataname
(
character(1)
) name of the dataset.
Returns
Character vector of key column names.
Method set_dataset()
Adds a dataset to this FilteredData
.
Usage
FilteredData$set_dataset(data, dataname)
Arguments
data
(
data.frame
orMultiAssayExperiment
) data to be filtered.dataname
(
character(1)
) the name of thedataset
to be added to this object.
Details
set_dataset
creates a FilteredDataset
object which keeps dataset
for the filtering purpose.
If this data has a parent specified in the join_keys
object stored in private$join_keys
then created FilteredDataset
(child) gets linked with other FilteredDataset
(parent).
"Child" dataset return filtered data then dependent on the reactive filtered data of the
"parent". See more in documentation of parent
argument in DataframeFilteredDataset
constructor.
Returns
self
, invisibly.
Method set_join_keys()
Set the join_keys
.
Usage
FilteredData$set_join_keys(join_keys)
Arguments
join_keys
(
join_keys
), seeteal.data::join_keys()
.
Returns
self
, invisibly.
Method get_filter_state()
Gets states of all contained FilterState
objects.
Usage
FilteredData$get_filter_state()
Returns
A teal_slices
object.
Method format()
Returns a formatted string representing this FilteredData
object.
Usage
FilteredData$format(show_all = FALSE, trim_lines = TRUE)
Arguments
show_all
(
logical(1)
) passed toformat.teal_slice
.trim_lines
(
logical(1)
) passed toformat.teal_slice
.
Returns
character(1)
the formatted string.
Method print()
Prints this FilteredData
object.
Usage
FilteredData$print(...)
Arguments
...
additional arguments passed to
format
.
Method set_filter_state()
Sets active filter states.
Usage
FilteredData$set_filter_state(state)
Arguments
state
(
teal_slices
)
Returns
NULL
, invisibly.
Method remove_filter_state()
Removes one or more FilterState
from a FilteredData
object.
Usage
FilteredData$remove_filter_state(state)
Arguments
state
(
teal_slices
) specifyingFilterState
objects to remove;teal_slice
s may contain onlydataname
andvarname
, other elements are ignored.
Returns
NULL
, invisibly.
Method clear_filter_states()
Remove all FilterStates
of a FilteredDataset
or all FilterStates
of a FilteredData
object.
Usage
FilteredData$clear_filter_states(datanames = self$datanames(), force = FALSE)
Arguments
datanames
(
character
) names of datasets for which to remove all filter states. Defaults to all datasets in thisFilteredData
object.force
(
logical(1)
) flag specifying whether to include anchored filter states.
Returns
NULL
, invisibly.
Method ui_filter_panel()
top-level shiny
module for the filter panel in the teal
app.
Contains 1) filter overview panel, 2) filter active panel, and 3) add filters panel.
Usage
FilteredData$ui_filter_panel(id)
Arguments
id
(
character(1)
)shiny
module instance id.
Returns
shiny.tag
Method srv_filter_panel()
Server function for filter panel.
Usage
FilteredData$srv_filter_panel(id, active_datanames = self$datanames)
Arguments
id
(
character(1)
)shiny
module instance id.active_datanames
(
function
orreactive
) returningdatanames
that should be shown on the filter panel. Must be a subset of thedatanames
in thisFilteredData
. If the function returnsNULL
(as opposed tocharacter(0)
), the filter panel will be hidden.
Returns
NULL
.
Method ui_active()
Server module responsible for displaying active filters.
Usage
FilteredData$ui_active(id)
Arguments
id
(
character(1)
)shiny
module instance id.
Returns
shiny.tag
Method srv_active()
Server module responsible for displaying active filters.
Usage
FilteredData$srv_active(id, active_datanames = self$datanames)
Arguments
id
(
character(1)
)shiny
module instance id.active_datanames
(
reactive
) defining subset ofself$datanames()
to be displayed.
Returns
NULL
.
Method ui_add()
Server module responsible for displaying drop-downs with variables to add a filter.
Usage
FilteredData$ui_add(id)
Arguments
id
(
character(1)
)shiny
module instance id.
Returns
shiny.tag
Method srv_add()
Server module responsible for displaying drop-downs with variables to add a filter.
Usage
FilteredData$srv_add(id, active_datanames = reactive(self$datanames()))
Arguments
id
(
character(1)
)shiny
module instance id.active_datanames
(
reactive
) defining subset ofself$datanames()
to be displayed.
Returns
NULL
.
Method ui_overview()
Creates the UI definition for the module showing counts for each dataset contrasting the filtered to the full unfiltered dataset.
Per dataset, it displays the number of rows/observations in each dataset, the number of unique subjects.
Usage
FilteredData$ui_overview(id)
Arguments
id
(
character(1)
)shiny
module instance id.
Method srv_overview()
Server function to display the number of records in the filtered and unfiltered data.
Usage
FilteredData$srv_overview(id, active_datanames = self$datanames)
Arguments
id
(
character(1)
)shiny
module instance id.active_datanames
(
reactive
) returningdatanames
that should be shown on the filter panel, must be a subset of thedatanames
argument provided toui_filter_panel
; if the function returnsNULL
(as opposed tocharacter(0)
), the filter panel will be hidden.
Returns
NULL
.
Method clone()
The objects of this class are cloneable with this method.
Usage
FilteredData$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
Examples
# use non-exported function from teal.slice
FilteredData <- getFromNamespace("FilteredData", "teal.slice")
library(shiny)
datasets <- FilteredData$new(list(iris = iris, mtcars = mtcars))
# get datanames
datasets$datanames()
datasets$set_filter_state(
teal_slices(teal_slice(dataname = "iris", varname = "Species", selected = "virginica"))
)
isolate(datasets$get_call("iris"))
datasets$set_filter_state(
teal_slices(teal_slice(dataname = "mtcars", varname = "mpg", selected = c(15, 20)))
)
isolate(datasets$get_filter_state())
isolate(datasets$get_call("iris"))
isolate(datasets$get_call("mtcars"))
### set_filter_state
library(shiny)
data(miniACC, package = "MultiAssayExperiment")
datasets <- FilteredData$new(list(iris = iris, mae = miniACC))
fs <- teal_slices(
teal_slice(
dataname = "iris", varname = "Sepal.Length", selected = c(5.1, 6.4),
keep_na = TRUE, keep_inf = FALSE
),
teal_slice(
dataname = "iris", varname = "Species", selected = c("setosa", "versicolor"),
keep_na = FALSE
),
teal_slice(
dataname = "mae", varname = "years_to_birth", selected = c(30, 50),
keep_na = TRUE, keep_inf = FALSE
),
teal_slice(dataname = "mae", varname = "vital_status", selected = "1", keep_na = FALSE),
teal_slice(dataname = "mae", varname = "gender", selected = "female", keep_na = TRUE),
teal_slice(
dataname = "mae", varname = "ARRAY_TYPE",
selected = "", keep_na = TRUE, experiment = "RPPAArray", arg = "subset"
)
)
datasets$set_filter_state(state = fs)
isolate(datasets$get_filter_state())