--- title: "Complete Example" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{example1} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) options(rmarkdown.html_vignette.check_title = FALSE) ``` ## Program The previous examples in the **logr** documentation were intentionally simplified to focus on the workings of a particular function. It is helpful, however, to also view **logr** functions in the context of a complete program. The following example shows a complete program. The example illustrates how **logr** functions work together, and interact with **tidyverse** and **sassy** functions to create a comprehensive log. This example has been chosen because it incorporates many of the functions that will log automatically. If you want to maximize the auto-generation features of **logr**, take note of these functions. The data for this example has been included in the **logr** package as an external data file. It may be accessed using the `system.file()` function as shown below, or downloaded directly from the **logr** GitHub site [here](https://raw.githubusercontent.com/dbosak01/logr/master/inst/extdata/DM.csv) ```{r eval=FALSE, echo=TRUE} library(tidyverse) library(sassy) options("logr.autolog" = TRUE) # Get temp location for log and report output tmp <- tempdir() # Open the log lf <- log_open(file.path(tmp, "example1.log")) # Send code to the log log_code() sep("Load the data") # Get path to sample data pkg <- system.file("extdata", package = "logr") # Define data library libname(sdtm, pkg, "csv") # Load the library into memory lib_load(sdtm) # Prepare Data ------------------------------------------------------------- sep("Prepare the data") # Define format for age groups ageg <- value(condition(x > 18 & x <= 29, "18 to 29"), condition(x >= 30 & x <= 44, "30 to 44"), condition(x >= 45 & x <= 59, "45 to 59"), condition(TRUE, "60+")) # Manipulate data final <- sdtm.DM %>% select(USUBJID, BRTHDTC, AGE) %>% mutate(AGEG = fapply(AGE, ageg)) %>% arrange(AGEG, AGE) %>% group_by(AGEG) %>% datastep(retain = list(SEQ = 0), calculate = {AGEM <- mean(AGE)}, attrib = list(USUBJID = dsattr(label = "Universal Subject ID"), BRTHDTC = dsattr(label = "Subject Birth Date", format = "%m %B %Y"), AGE = dsattr(label = "Subject Age in Years", justify = "center"), AGEG = dsattr(label = "Subject Age Group", justify = "left"), AGEB = dsattr(label = "Age Group Boundaries"), SEQ = dsattr(label = "Subject Age Group Sequence", justify = "center"), AGEM = dsattr(label = "Mean Subject Age", format = "%1.2f"), AGEMC = dsattr(label = "Subject Age Mean Category", format = c(B = "Below", A = "Above"), justify = "right")), { # Start and end of Age Groups if (first. & last.) AGEB <- "Start - End" else if (first.) AGEB <- "Start" else if (last.) AGEB <- "End" else AGEB <- "-" # Sequence within Age Groups if (first.) SEQ <- 1 else SEQ <- SEQ + 1 # Above or Below the mean age if (AGE > AGEM) AGEMC <- "A" else AGEMC <- "B" }) %>% ungroup() %>% put() # Put dictionary to log dictionary(final) %>% put() # Create Report ------------------------------------------------------------ sep("Create report") # Create table tbl <- create_table(final) # Create report rpt <- create_report(file.path(tmp, "./output/example1.rtf"), output_type = "RTF", font = "Arial") %>% titles("Our first SASSY report", bold = TRUE) %>% add_content(tbl) # write out the report res <- write_report(rpt) # Clean Up ----------------------------------------------------------------- sep("Clean Up") # Unload libname lib_unload(sdtm) # Close the log log_close() # View log writeLines(readLines(lf, encoding = "UTF-8")) # View Report # file.show(res$modified_path) ``` ## Output Here is the report produced by the sample program: ## Log The above program produces the following log: ``` ========================================================================= Log Path: C:/Users/dbosa/AppData/Local/Temp/Rtmp6DW7BF/log/example1.log Program Path: C:\packages\logr\vignettes\logr-example1.Rmd Working Directory: C:/packages/logr 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.3 sassy_1.0.5 forcats_0.5.1 stringr_1.4.0 purrr_0.3.4 readr_2.0.2 tidyr_1.1.4 tibble_3.1.5 ggplot2_3.3.5 tidyverse_1.3.1 logr_1.2.7 dplyr_1.0.7 Log Start Time: 2021-11-16 08:40:18 ========================================================================= > library(tidyverse) > library(sassy) > > options("logr.autolog" = TRUE) > > # Open the log > lf <- log_open() > > # Send code to the log > log_code() > > sep("Load the data") > > # Get path to sample data > pkg <- system.file("extdata", package = "logr") > > # Define data library > libname(sdtm, pkg, "csv") > > # Load the library into memory > lib_load(sdtm) > > > # Prepare Data ------------------------------------------------------------- > sep("Prepare the data") > > # Define format for age groups > ageg <- value(condition(x > 18 & x <= 29, "18 to 29"), > condition(x >= 30 & x <= 44, "30 to 44"), > condition(x >= 45 & x <= 59, "45 to 59"), > condition(TRUE, "60+")) > > > # Manipulate data > final <- sdtm.DM %>% > select(USUBJID, BRTHDTC, AGE) %>% > mutate(AGEG = fapply(AGE, ageg)) %>% > arrange(AGEG, AGE) %>% > group_by(AGEG) %>% > datastep(retain = list(SEQ = 0), > calculate = {AGEM <- mean(AGE)}, > attrib = list(USUBJID = dsattr(label = "Universal Subject ID"), > BRTHDTC = dsattr(label = "Subject Birth Date", > format = "%m %B %Y"), > AGE = dsattr(label = "Subject Age in Years", > justify = "center"), > AGEG = dsattr(label = "Subject Age Group", > justify = "left"), > AGEB = dsattr(label = "Age Group Boundaries"), > SEQ = dsattr(label = "Subject Age Group Sequence", > justify = "center"), > AGEM = dsattr(label = "Mean Subject Age", > format = "%1.2f"), > AGEMC = dsattr(label = "Subject Age Mean Category", > format = c(B = "Below", A = "Above"), > justify = "right")), > { > > # Start and end of Age Groups > if (first. & last.) > AGEB <- "Start - End" > else if (first.) > AGEB <- "Start" > else if (last.) > AGEB <- "End" > else > AGEB <- "-" > > # Sequence within Age Groups > if (first.) > SEQ <- 1 > else > SEQ <- SEQ + 1 > > # Above or Below the mean age > if (AGE > AGEM) > AGEMC <- "A" > else > AGEMC <- "B" > > }) %>% > ungroup() %>% > put() > > # Put dictionary to log > dictionary(final) %>% put() > > # Create Report ------------------------------------------------------------ > sep("Create report") > > > # Create table > tbl <- create_table(final) > > # Create report > rpt <- create_report("./output/example1.rtf", > output_type = "RTF", font = "Arial") %>% > titles("Our first SASSY report", bold = TRUE) %>% > add_content(tbl) > > # write out the report > res <- write_report(rpt) > > > # Clean Up ----------------------------------------------------------------- > sep("Clean Up") > > # Unload libname > lib_unload(sdtm) > > # Close the log > log_close() > > # View log > writeLines(readLines(lf, encoding = "UTF-8")) > > # View Report > # file.show(res$modified_path) ========================================================================= Load the data ========================================================================= # library 'sdtm': 8 items - attributes: csv not loaded - path: C:/Users/dbosa/Documents/R/win-library/4.1/logr/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 NOTE: Log Print Time: 2021-11-16 08:40:54 NOTE: Elapsed Time in seconds: 35.2692317962646 lib_load: library 'sdtm' loaded NOTE: Log Print Time: 2021-11-16 08:41:00 NOTE: Elapsed Time in seconds: 5.96066999435425 ========================================================================= Prepare the data ========================================================================= select: dropped 21 variables (STUDYID, DOMAIN, SUBJID, RFSTDTC, RFENDTC, ) NOTE: Log Print Time: 2021-11-16 08:41:09 NOTE: Elapsed Time in seconds: 9.39324498176575 mutate: new variable 'AGEG' (character) with 4 unique values and 0% NA NOTE: Log Print Time: 2021-11-16 08:41:09 NOTE: Elapsed Time in seconds: 0.0129940509796143 group_by: one grouping variable (AGEG) NOTE: Log Print Time: 2021-11-16 08:41:09 NOTE: Elapsed Time in seconds: 0.0119409561157227 datastep: columns increased from 4 to 8 NOTE: Log Print Time: 2021-11-16 08:41:09 NOTE: Elapsed Time in seconds: 0.0947761535644531 ungroup: no grouping variables NOTE: Log Print Time: 2021-11-16 08:41:09 NOTE: Elapsed Time in seconds: 0.0029609203338623 # A tibble: 87 x 8 USUBJID BRTHDTC AGE AGEG AGEM AGEB SEQ AGEMC 1 ABC-04-128 1987-05-24 19 18 to 29 49.4 Start 1 B 2 ABC-07-011 1985-01-18 21 18 to 29 49.4 - 2 B 3 ABC-09-139 1985-11-13 21 18 to 29 49.4 - 3 B 4 ABC-09-018 1984-08-29 22 18 to 29 49.4 - 4 B 5 ABC-04-074 1983-03-28 23 18 to 29 49.4 - 5 B 6 ABC-01-053 1980-04-07 26 18 to 29 49.4 - 6 B 7 ABC-06-070 1980-02-01 26 18 to 29 49.4 End 7 B 8 ABC-02-112 1976-11-01 30 30 to 44 49.4 Start 1 B 9 ABC-01-056 1975-05-02 31 30 to 44 49.4 - 2 B 10 ABC-03-089 1975-10-02 31 30 to 44 49.4 - 3 B # ... with 77 more rows NOTE: Data frame has 87 rows and 8 columns. NOTE: Log Print Time: 2021-11-16 08:41:09 NOTE: Elapsed Time in seconds: 0.0398931503295898 # A tibble: 8 x 10 Name Column Class Label Description Format Width Justify Rows NAs 1 final USUBJID character Universa~ 10 87 0 2 final BRTHDTC Date Subject ~ "%m %B~ NA 87 0 3 final AGE numeric Subject ~ NA center 87 0 4 final AGEG character Subject ~ 8 left 87 0 5 final AGEM numeric Mean Sub~ "%1.2f" NA 87 0 6 final AGEB character Age Grou~ 5 87 0 7 final SEQ numeric Subject ~ NA center 87 0 8 final AGEMC character Subject ~ "Below~ 1 right 87 0 NOTE: Data frame has 8 rows and 10 columns. NOTE: Log Print Time: 2021-11-16 08:41:11 NOTE: Elapsed Time in seconds: 2.2303478717804 ========================================================================= Create report ========================================================================= # A report specification: 3 pages - file_path: 'C:\Users\dbosa\AppData\Local\Temp\Rtmp6DW7BF/./output/example1.rtf' - output_type: RTF - units: inches - orientation: landscape - margins: top 0.5 bottom 0.5 left 1 right 1 - line size/count: 9/46 - title 1: 'Our first SASSY report' - content: # A table specification: - data: tibble 'final' 87 rows 8 cols - show_cols: all - use_attributes: all NOTE: Log Print Time: 2021-11-16 08:41:16 NOTE: Elapsed Time in seconds: 4.57250308990479 ========================================================================= Clean Up ========================================================================= lib_sync: synchronized data in library 'sdtm' NOTE: Log Print Time: 2021-11-16 08:41:17 NOTE: Elapsed Time in seconds: 1.38584780693054 lib_unload: library 'sdtm' unloaded NOTE: Log Print Time: 2021-11-16 08:41:17 NOTE: Elapsed Time in seconds: 0.00399112701416016 ========================================================================= Log End Time: 2021-11-16 08:41:19 Log Elapsed Time: 0 00:00:01 ========================================================================= ```