--- title: "Introduction to Chevron" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Introduction to Chevron} %\VignetteEncoding{UTF-8} %\VignetteEngine{knitr::rmarkdown} editor_options: chunk_output_type: console --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ## Introduction The `chevron` R package provides functions to produce standard tables, listings and graphs (TLGs) used to analyze and report clinical trials data. The ensemble of function used to produce a particular output are stored in an `S4` object of virtual class `chevron_tlg`. Each type of output are associated with a specific class: `chevron_t` for tables, `chevron_l` for listings and `chevron_g` for graphs. Each standard output is associated with one *`chevron_tlg` object*. They contain the following objects in separate slots: * A `main` function also refereed to as *TLG-function*. * A `preprocess` function. * A `postprocess` function ### *TLG-functions* The *TLG-functions* in `chevron` use other packages to produce the final outputs, for example `rtables` and `tern` are used to create tables, `ggplot2`, `lattice`, and `grid` are used to create graphs, `rlistings` to create listings. *TLG-functions* in `chevron` such as `dmt01_main`, `aet02_main`, `aet02_main` have the following properties: 1. they produce a narrow defined output (currently standards in Roche `GDS`). Note, that the naming convention `_main` indicates that a Roche `GDS` defined standard may have different implementations. Or, alternatively, a `GDS` template id can be regarded as a *guideline* and the function name in `chevron` as a *standard*. 1. have, if possible, few arguments to modify the standard. Generally, arguments may change the structure of the table (arm variable, which variables are summarized) and also parameterize the cell content (i.e. alpha-level for p-value). 1. have always the first argument `adam_db` which is the collection of `ADaM` datasets (`ADSL`, `ADAE`, `ADRS`, etc.). Please read the *The `adam_db` Argument* vignette in this package for more details. ### *preprocessing* The *preprocess* functions in `chevron` use `base`, `dplyr` and `dunlin` packages to process input data object and turn them into a suitable input for *TLG-functions*. *preprocess* in chevron such as `dmt01_pre`, `aet02_pre`, `aet02_pre` have the following properties: 1. they return a `list` of `data.frame` object amenable to processing by a *TLG-functions*. message. 1. have very few arguments to modify the standard. 1. have always the first argument `adam_db` which is the collection of `ADaM` datasets (`ADSL`, `ADAE`, `ADRS`, etc.). Please read the *The `adam_db` Argument* vignette in this package for more details. Please note that the ultimate responsible person of the preprocessing functions is the end user. The provided preprocessing function is only a template and users could modify depending on their need/data. This preprocessing function will be printed to allow modification in script generated in `citril`. ### *postprocessing* By default, the Postprocessing function returns its input or a null report if the input has no rows. *`postprocessing`* function of a `chevron_tlg` object must have at least `tlg` as formal arguments. ## Example `AET02` For example, the `GDS` template `aet02` is implemented in `chevron` with the `chevropn_tlg` objects that have the name `aet02`. We first load the data as a `list` of `data.frame`, where each table represents a domain. ```{r} library(chevron) data(syn_data, package = "chevron") ``` A the `aet02` output is then created as follows: ```{r} run(aet02, syn_data) ``` The function associated with a particular slot can be retrieved with the corresponding method: `main`, `lyt`, `preprocess` `postprocess` and `datasets`. ```{r} main(aet02) ``` These are standard functions that can be used on their own. ```{r} res <- preprocess(aet02)(syn_data) # or foo <- aet02@preprocess res <- foo(syn_data) str(res, max.level = 0) ``` ## `chevron_tlg` object customization In some instances it is useful to customize the `chevron_tlg` object, for example by changing the pre processing functions in script generated. Please modify the code directly inside the `pre_fun`, and make sure the function returns a named list of data frames. Please be careful about the argument names. The default argument of `pre` functions will be override by the argument in spec. ## Custom `chevron_tlg` object creation In some cases, you may want to create a new `chevron_tlg` template. To create a `chevron_tlg` object from scratch, use the provided constructors corresponding to the desired output: * `chevron_t()` for tables. * `chevron_l()` for listings. * `chevron_g()` for graphs. ```{r, eval = FALSE} library(rtables) library(tern) my_template <- chevron_t( main = "", preprocess = "", postprocess = "" ) run(my_template, syn_data) ``` Note that to ensure the correct execution of the `run` function, the name of the first argument of the `main` function must be `adam_db`; the input `list` of `data.frame` object to pre-process. The name of the first argument of the `preprocess` function must be `adam_db`; the input `list` object to create `TLG` output and finally, the name of the first argument of the `postprocess` function must be `tlg`, the input `TableTree` object to post-process. Validation criteria enforce these rules upon creation of a `chevron_tlg` object.