Pre-processing data
NEST CoreDev
2022-07-28
preprocessing-data.Rmd
Usage 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>
#<code
determines 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. -
#nocode
at the end of the line excludes this line from preprocessing. - Lines enclosed within
#nocode>
#<nocode
are excluded from preprocessing.
Further, the get_code
function has the following
arguments that might be useful:
-
exclude_comments = TRUE
removes comments from preprocessing code. -
read_sources = TRUE
means 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
.