Pre-processing data
NEST CoreDev
2022-07-28
preprocessing-data.RmdUsage in teal apps
In this vignette, we will show how to use preprocessing in a
teal app. The basics of preprocessing data have been
discussed in teal.data here.
In a teal app, providing the code in a copy-paste style
is cumbersome and can lead to an out-of-sync situation where the code
does not represent the preprocessing code anymore. We therefore use the
get_code function to extract the preprocessing code from
the app.R file. The get_code function requires
# tags to indicate which lines of code in
app.R need be included in the preprocessing code.
get_code understands the following tags:
- Enclosing preprocessing code between
#code>#<codedetermines the start and end of preprocessing. Only one start and one end is allowed. If start or end are not specified then preprocessing starts at the beginning of the file and ends at the end respectively. -
#nocodeat the end of the line excludes this line from preprocessing. - Lines enclosed within
#nocode>#<nocodeare excluded from preprocessing.
Further, the get_code function has the following
arguments that might be useful:
-
exclude_comments = TRUEremoves comments from preprocessing code. -
read_sources = TRUEmeans that code from sourced file will be included instead ofsource()call.
To complete the above example try the code below (NOTE: make sure to save the code in a
file called app.R):
# Code needs modification before it can be run:
# - save as app.R
# for the purpose of example save the file to current directory
library(scda)
library(teal)
synthetic_cdisc_data("latest")$adsl
saveRDS(synthetic_cdisc_data("latest")$adsl, "adsl.rds")
# code>
adsl <- readRDS("adsl.rds")
# <code
cs_arm <- choices_selected(c("ACTARMCD", "ARMCD"), "ACTARMCD")
app <- init(
data = cdisc_data(cdisc_dataset("ADSL", adsl), code = get_code(file = "app.R")),
modules = modules(example_module())
)
shinyApp(app$ui, app$server)Also try the following more advanced usage of
get_code:
# Code needs modification before it can be run:
# - save as app.R
library(scda)
library(teal)
# code>
# data import
adsl <- synthetic_cdisc_data("latest")$adsl
excluded_obj1 <- 1:10 # nocode
# nocode>
excluded_obj2 <- 1:10
# <nocode
# <code
x <- init(
data = cdisc_data(cdisc_dataset("ADSL", adsl),
code = get_code("app.R", exclude_comments = TRUE, read_sources = TRUE),
check = TRUE
),
modules = modules(example_module()),
header = "Simple app with preprocessing",
footer = tags$p(class = "text-muted", "Source: agile-R website")
)
shinyApp(x$ui, x$server)If you set check = TRUE in cdisc_data then
the data provided to the application is checked against the data
obtained by evaluating the code in an isolated environment.
If the datasets do not match then cdisc_data returns an
error.
cdisc_data also analyzes the arguments passed to it.
Note that additional transformation within cdisc_data call
can break reproducibility and is not allowed, e.g. developers shouldn’t
do an operation like ADSL = mutate(ADSL, a = 1) inside
cdisc_data.