knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) options(rmarkdown.html_vignette.check_title = FALSE)
The previous examples in the libr documentation were intentionally simplified to focus on the workings of a particular function. It is helpful, however, to also view libr functions in the context of a complete program. The following example shows a complete program. The example illustrates how libr functions work together, and interact with tidyverse and sassy functions to create a report.
The data for this example has been included in the libr package as an
external data file. It may be accessed using the system.file()
function
as shown below, or downloaded directly from the libr GitHub site
here
library(tidyverse) library(sassy) # Prepare Log ------------------------------------------------------------- options("logr.autolog" = TRUE, "logr.notes" = FALSE) # Get temp location for log and report output tmp <- tempdir() # Open log lf <- log_open(file.path(tmp, "example1.log")) # Load and Prepare Data --------------------------------------------------- sep("Prepare Data") # Get path to sample data pkg <- system.file("extdata", package = "libr") # Define data library libname(sdtm, pkg, "csv", quiet = TRUE) # Prepare data dm_mod <- sdtm$DM %>% select(USUBJID, SEX, AGE, ARM) %>% filter(ARM != "SCREEN FAILURE") %>% datastep({ if (AGE >= 18 & AGE <= 24) AGECAT = "18 to 24" else if (AGE >= 25 & AGE <= 44) AGECAT = "25 to 44" else if (AGE >= 45 & AGE <= 64) AGECAT <- "45 to 64" else if (AGE >= 65) AGECAT <- ">= 65" }) %>% put() put("Get population counts") arm_pop <- count(dm_mod, ARM) %>% put() sex_pop <- count(dm_mod, SEX) %>% put() agecat_pop <- count(dm_mod, AGECAT) %>% put() # Convert agecat to factor so rows will sort correctly agecat_pop$AGECAT <- factor(agecat_pop$AGECAT, levels = c("18 to 24", "25 to 44", "45 to 64", ">= 65")) # Sort agecat agecat_pop <- agecat_pop %>% arrange(AGECAT) # Create Plots ------------------------------------------------------------ plt1 <- ggplot(data = arm_pop, aes(x = ARM, y = n)) + geom_col(fill = "#0000A0") + geom_text(aes(label = n), vjust = 1.5, colour = "white") + labs(x = "Treatment Group", y = "Number of Subjects (n)") plt2 <- ggplot(data = sex_pop, aes(x = SEX, y = n)) + geom_col(fill = "#00A000") + geom_text(aes(label = n), vjust = 1.5, colour = "white") + labs(x = "Biological Sex", y = "Number of Subjects (n)") plt3 <- ggplot(data = agecat_pop, aes(x = AGECAT, y = n)) + geom_col(fill = "#A00000") + geom_text(aes(label = n), vjust = 1.5, colour = "white") + labs(x = "Age Categories", y = "Number of Subjects (n)") # Report ------------------------------------------------------------------ sep("Create and print report") page1 <- create_plot(plt1, 4.5, 7) %>% titles("Figure 1.1", "Distribution of Subjects by Treatment Group") page2 <- create_plot(plt2, 4.5, 7) %>% titles("Figure 1.2", "Distribution of Subjects by Biological Sex") page3 <- create_plot(plt3, 4.5, 7) %>% titles("Figure 1.2", "Distribution of Subjects by Age Category") rpt <- create_report(file.path(tmp, "./output/example1.rtf"), output_type = "RTF", font = "Arial") %>% set_margins(top = 1, bottom = 1) %>% page_header("Sponsor: Company", "Study: ABC") %>% add_content(page1) %>% add_content(page2) %>% add_content(page3) %>% footnotes("Program: DM_Figure.R") %>% page_footer(paste0("Date Produced: ", fapply(Sys.time(), "%d%b%y %H:%M")), right = "Page [pg] of [tpg]") res <- write_report(rpt) # Clean Up ---------------------------------------------------------------- sep("Clean Up") # Close log log_close() # View log # file.show(lf) # View report # file.show(res$file_path)
Here is the log from the above program:
========================================================================= Log Path: C:/Users/dbosa/AppData/Local/Temp/RtmpwLpEIV/log/example1.log Program Path: C:\packages\Testing\libr_example1.R Working Directory: C:/packages/Testing User Name: dbosa R Version: 4.1.2 (2021-11-01) Machine: SOCRATES x86-64 Operating System: Windows 10 x64 build 19041 Base Packages: stats graphics grDevices utils datasets methods base Other Packages: tidylog_1.0.2 reporter_1.2.6 libr_1.2.1 fmtr_1.5.4 logr_1.2.7 sassy_1.0.5 forcats_0.5.1 stringr_1.4.0 dplyr_1.0.7 purrr_0.3.4 readr_2.0.2 tidyr_1.1.4 tibble_3.1.5 ggplot2_3.3.5 tidyverse_1.3.1 Log Start Time: 2021-11-20 23:06:50 ========================================================================= ========================================================================= Prepare Data ========================================================================= # library 'sdtm': 8 items - attributes: csv not loaded - path: C:/Users/dbosa/Documents/R/win-library/4.1/libr/extdata - items: Name Extension Rows Cols Size LastModified 1 AE csv 150 27 88.3 Kb 2021-10-08 15:02:15 2 DA csv 3587 18 528.1 Kb 2021-10-08 15:02:15 3 DM csv 87 24 45.4 Kb 2021-10-08 15:02:15 4 DS csv 174 9 33.9 Kb 2021-10-08 15:02:15 5 EX csv 84 11 26.2 Kb 2021-10-08 15:02:15 6 IE csv 2 14 13.2 Kb 2021-10-08 15:02:15 7 SV csv 685 10 70.2 Kb 2021-10-08 15:02:15 8 VS csv 3358 17 467.3 Kb 2021-10-08 15:02:15 lib_load: library 'sdtm' loaded select: dropped 20 variables (STUDYID, DOMAIN, SUBJID, RFSTDTC, RFENDTC, <U+0085>) filter: removed 2 rows (2%), 85 rows remaining datastep: columns increased from 4 to 5 # A tibble: 85 x 5 USUBJID SEX AGE ARM AGECAT <chr> <chr> <dbl> <chr> <chr> 1 ABC-01-049 M 39 ARM D 25 to 44 2 ABC-01-050 M 47 ARM B 45 to 64 3 ABC-01-051 M 34 ARM A 25 to 44 4 ABC-01-052 F 45 ARM C 45 to 64 5 ABC-01-053 F 26 ARM B 25 to 44 6 ABC-01-054 M 44 ARM D 25 to 44 7 ABC-01-055 F 47 ARM C 45 to 64 8 ABC-01-056 M 31 ARM A 25 to 44 9 ABC-01-113 M 74 ARM D >= 65 10 ABC-01-114 F 72 ARM B >= 65 # ... with 75 more rows Get population counts count: now 4 rows and 2 columns, ungrouped # A tibble: 4 x 2 ARM n <chr> <int> 1 ARM A 20 2 ARM B 21 3 ARM C 21 4 ARM D 23 count: now 2 rows and 2 columns, ungrouped # A tibble: 2 x 2 SEX n <chr> <int> 1 F 32 2 M 53 count: now 4 rows and 2 columns, ungrouped # A tibble: 4 x 2 AGECAT n <chr> <int> 1 >= 65 13 2 18 to 24 5 3 25 to 44 23 4 45 to 64 44 ========================================================================= Create and print report ========================================================================= # A report specification: 3 pages - file_path: 'C:\Users\dbosa\AppData\Local\Temp\RtmpwLpEIV/./output/example1.rtf' - output_type: RTF - units: inches - orientation: landscape - margins: top 1 bottom 1 left 1 right 1 - line size/count: 9/40 - page_header: left=Sponsor: Company right=Study: ABC - footnote 1: 'Program: DM_Figure.R' - page_footer: left=Date Produced: 20Nov21 23:06 center= right=Page [pg] of [tpg] - content: # A plot specification: - data: 4 rows, 2 cols - layers: 2 - height: 4.5 - width: 7 - title 1: 'Figure 1.1' - title 2: 'Distribution of Subjects by Treatment Group' # A plot specification: - data: 2 rows, 2 cols - layers: 2 - height: 4.5 - width: 7 - title 1: 'Figure 1.2' - title 2: 'Distribution of Subjects by Biological Sex' # A plot specification: - data: 4 rows, 2 cols - layers: 2 - height: 4.5 - width: 7 - title 1: 'Figure 1.2' - title 2: 'Distribution of Subjects by Age Category' ========================================================================= Clean Up ========================================================================= lib_sync: synchronized data in library 'sdtm' lib_unload: library 'sdtm' unloaded ========================================================================= Log End Time: 2021-11-20 23:06:57 Log Elapsed Time: 0 00:00:07 =========================================================================
And here is the output:
Next: Complete Example 2
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.