teal
extends the shiny
framework, enabling the creation of interactive GUI applications using the R
.
shiny
, and teal
facilitate the development of extensive applications through combining small, decoupled modules.
The teal.modules.general
package consist of collection of modules essential for developing teal
applications.
It is "general" in the sense that the intended functions of these modules are more fundamental. This contrasts with the more specialized focus on clinical data found in the teal.modules.clinical
package.
The modules from teal.modules.general
can be used in conjunction with modules from teal.modules.clinical
and / or
other shiny
modules to build a large teal
/ shiny
app.
The concepts presented here require knowledge about the core features of teal
, specifically on how to launch a teal
application and how to pass data into it. Therefore, it is highly recommended to refer to the README
file and
the introductory vignette of the teal
package.
See also teal.modules.clinical
's README
.
There are five areas of data science that teal.modules.general
provides tools and solutions (modules) for:
See package functions / modules.
A simple application featuring the tm_variable_browser()
module:
# load libraries library(teal.modules.general) library(teal.widgets) library(sparkline) # teal_data object data <- teal_data() data <- within(data, { ADSL <- teal.data::rADSL ADTTE <- teal.data::rADTTE }) join_keys(data) <- default_cdisc_join_keys[names(data)] # tm_variable_browser module tm_variable_browser_module <- tm_variable_browser( label = "Variable browser", ggplot2_args = ggplot2_args( labs = list(subtitle = "Plot generated by Variable Browser Module") ) ) # initialize the app app <- init( data = data, modules = modules(tm_variable_browser_module) ) shinyApp(app$ui, app$server)
code <- paste0(c( knitr::knit_code$get("app") ), collapse = "\n") url <- roxy.shinylive::create_shinylive_url(code) cat(sprintf("[Open in Shinylive](%s)\n\n", url))
knitr::include_url(url, height = "800px")
Let's break the above app into pieces:
1: Load the necessary libraries and data.
library(teal.modules.general) library(teal.widgets)
2: Construct a teal_data
object containing that will serve as the source of data for the teal
app. teal_data
not only encapsulates the data for the app, but it also houses the code required to create the data to maintain reproducibility.
To do this, we create an empty teal_data
object and evaluate code to produce the data within the teal_data
object, so both the code and data are stored together.
Following this, we set the datanames
and join_keys
.
data <- teal_data() data <- within(data, { ADSL <- teal.data::rADSL ADTTE <- teal.data::rADTTE }) join_keys(data) <- default_cdisc_join_keys[names(data)]
3: Initialize a teal
application with specified data and modules, in this case, the module: tm_variable_browser
, datasets:ADSL
and ADTTE
.
shiny::shinyApp()
use the ui
and server
component to initialize the teal
app.
tm_variable_browser_module <- tm_variable_browser( # module name to display in the GUI label = "Variable browser", # this argument takes a set of arguments to pass to ggplot2. # the arguments must have the same names as its ggplot2 counterpart, e.g. `subtitle` ggplot2_args = ggplot2_args( labs = list(subtitle = "Plot generated by Variable Browser Module") ) ) app <- init( data = data, modules = modules(tm_variable_browser_module) ) if (interactive()) { shinyApp(app$ui, app$server) }
In a teal
app, data and modules are decoupled. In the app above:
data
argument.modules
argument.init
function took these arguments and returned a list containing ui
and server
object, which can be demonstrated by running:class(app) names(app)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.