--- title: "Guidelines for Open-sourcing" output: rmarkdown::html_document: theme: "spacelab" highlight: "kate" toc: true toc_float: true author: - Joe Zhu ([`shajoezhu`](https://github.com/shajoezhu)) vignette: > %\VignetteIndexEntry{Guidelines for Open-sourcing} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` `AutoslideR` core functions that are used for slide rendering and workflow is already open-sourced with the [`autoslider.core`](https://cran.r-project.org/package=autoslider.core) package, if you have built your own customized template package, namely `autoslider.*` (see [this page](downstream.html) for guidelines), once the template functions are stable, generic, we also encourage to make these functions open-source for external users. This article describes the how to process. Template that contains specific variable names or columns are not recommended for open-sourcing. The key steps include the following * From `autoslider.*` to `autoslider.core`. 1. Move the template R functions `autoslider.core` `R/` directory, rebuild the `autoslider.core` documentation, and update the `autoslider.core` `NAMESPACE`. 2. *Copy* (keep one copy within `autoslideR`) the relevant test function to `autoslider.core` `tests/testthat` directory. * On the `autoslider.*` side. 1. Reexport the template function, and edit the `R/autoslider_core.R` file. 2. Recompile the documentation, and update the `autoslideR` `NAMESPACE`. For example, `t_dm_slide.R` contains `t_dm_slide` template function, as the following ```{r, eval=FALSE} #' Demographic table #' #' @param adsl ADSL data set, dataframe #' @param arm Arm variable, character, "`TRT01P" by default. #' @param vars Characters of variables #' @param stats see `.stats` from [tern::analyze_vars()] #' @param split_by_study Split by study, building structured header for tables #' @param side_by_side "GlobalAsia" or "GlobalAsiaChina" to define the side by side requirement #' @return rtables object #' @inherit gen_notes note #' @export #' @examples #' library(dplyr) #' adsl <- eg_adsl #' out1 <- t_dm_slide(adsl, "TRT01P", c("SEX", "AGE", "RACE", "ETHNIC", "COUNTRY")) #' print(out1) #' generate_slides(out1, paste0(tempdir(), "/dm.pptx")) #' #' out2 <- t_dm_slide(adsl, "TRT01P", c("SEX", "AGE", "RACE", "ETHNIC", "COUNTRY"), #' split_by_study = TRUE #' ) #' print(out2) #' t_dm_slide <- function(adsl, arm = "TRT01P", vars = c("AGE", "SEX", "RACE"), stats = c("median", "range", "count_fraction"), split_by_study = FALSE, side_by_side = NULL) { if (is.null(side_by_side)) { extra <- NULL } else { extra <- c("COUNTRY") } for (v in c(vars, extra)) { assert_that(has_name(adsl, v)) } adsl1 <- adsl %>% select(all_of(c("STUDYID", "USUBJID", arm, vars, extra))) lyt <- build_table_header(adsl1, arm, split_by_study = split_by_study, side_by_side = side_by_side ) lyt <- lyt %>% analyze_vars( na.rm = TRUE, .stats = stats, denom = "n", vars = vars, .formats = c(mean_sd = "xx.xx (xx.xx)", median = "xx.xx"), var_labels = formatters::var_labels(adsl1)[vars] ) result <- lyt_to_side_by_side(lyt, adsl1, side_by_side) if (is.null(side_by_side)) { # adding "N" attribute arm <- col_paths(result)[[1]][1] n_r <- data.frame( ARM = toupper(names(result@col_info)), N = col_counts(result) %>% as.numeric() ) %>% `colnames<-`(c(paste(arm), "N")) %>% dplyr::arrange(get(arm)) attr(result, "N") <- n_r } result@main_title <- "Demographic slide" result } ``` 1. Move `t_dm_slide.R` file from `autoslider.*` to `autoslider.core` `R/` directory. 2. Copy `autoslider.*` `tests/testthat/test-t_dm_slide.R` to `autoslider.core` `tests/testthat/`. 3. Add the following code to `autoslider.*` `R/autoslider_core.R` file. ```{r, eval=FALSE} #' Demographic table #' @importFrom autoslider.core t_dm_slide #' @examples #' library(dplyr) #' adsl <- eg_adsl #' out1 <- t_dm_slide(adsl, "TRT01P", c("SEX", "AGE", "RACE", "ETHNIC", "COUNTRY")) #' print(out1) #' generate_slides(out1, "dm.pptx") #' #' out2 <- t_dm_slide(adsl, "TRT01P", c("SEX", "AGE", "RACE", "ETHNIC", "COUNTRY"), #' split_by_study = TRUE #' ) #' print(out2) #' #' @export autoslider.core::t_dm_slide ```