13 R Markdown for literate programming and automated reports
This discussion thread is for gathering knowledgebase related to R Markdown: https://rmarkdown.rstudio.com/
It can be used to generate reports, slides, websites, dashboards, shiny app, books, emails. It is the tools allows you to do literate programming, which – as defined by Donald Knuth - is the type of programming where human language is combined with computer language, making the code much easier understood by your colleagues and yourself and coding much more fun.
13.1 Resources
Main reference: https://bookdown.org/yihui/rmarkdown/
A couple of great webinars from RStudio folks on advanced use of R Markdown - with lots of source codes:
- https://www.rstudio.com/resources/webinars/rethink-reporting-with-automation/
- https://www.rstudio.com/resources/webinars/sharing-on-short-notice-how-to-get-your-materials-online-with-r-markdown/
Business Reports with R Markdown: https://github.com/cderv/meetup-2021-rmd-business-report
R Markdown Taxonomy: https://github.com/jthomasmock/penguin-project
13.2 Automated generation of multiple PDF files
Question: “Can we automatically generate multiple PDF files using R RMarkdown? E.g. 20 report cards in PDF format, each showing results for 50 different parameters of the analysis?”
Answer: “Absolutely!” - This is what RMarkdown is developed for.
Here’s a tiny R script example showing how to do it.
# report_generator.R
mvndr_nm <- c('name1', 'name2', 'name3', 'name4', 'name5', 'name6')
mvndr_nbr<- c('60031167', '60688509', '60074051', '60148060', '60086898', '60080204')
for (i in seq_along(mvndr_nm)) {
rmarkdown::render("C:/Users/santi/Documents/R Scripts/Export_Data_CSV.Rmd",
output_file = sprintf("MVNDR_%s.html", mvndr_nbr[i]),
params = list(MVNDR_NBR = mvndr_nbr[i], MVNDR_NM = mvndr_nm[i]))
}
# Export_Data_CSV.Rmd
# (remove # and REMOVETHIS_ and replace \' with \` below)
# - - -
# REMOVETHIS_title: "'r REMOVETHIS_params$MVNDR_NBR'"
# output: html_document:
# REMOVETHIS_params:
# MVNDR_NBR: NA
# MVNDR_NM: NA
# - - -
This document provides a summary of "' r REMOVETHIS_params$MVNDR_NM'" performance within in QC
Source: - https://stackoverflow.com/questions/67739377/passing-multiple-parameters-in-rmarkdown-document - https://stackoverflow.com/questions/60203785/using-multiple-params-in-rmarkdown-yaml-fields
13.3 Useful tricks and tips
13.3.1 In RStudio editor
In Tools -> Global Options… -> R Markdown
- Choose "Show in Document outline: BOTH Sections and Chunks.
- Uncheck “Show output inline”, so you can see it Console as you normally do when running from .R file
In Tools ->Global Options… -> Pane Layout and Appearance, - you can add additional Pan (starting from RStudio 1.2) - We like it having Console window on left (to see more!) - Some also like dark theme (eg. “Vibrant ink” diplays comments well, others do not)
13.3.2 Spliting Rmd in chunks
- Split your long Rmd into small ones!
- Give them names - sorted / tagged by order and keywords
- For debugging or simplify your work use
knitr::knit_exit()
r code. - Use (PART) and {-} when you need to split in part and not to index the page
See index.Rmd of this book. Below is excerpt from them
# (PART) Community Codes {-}
` ` `{r 21_gc_datasets, child = '21_gc_datasets.Rmd'}
` ` `
...
# (APPENDIX) Appendices {-}
` ` `{r 40_ca_packages, child = '40_ca_packages.Rmd'}
` ` `
...
` ` `{r include=FALSE}
knitr::knit_exit() # Stop compiling here
` ` `
...
` ` `{r 99_some_notready_parts, child = '99_some_notready_parts.Rmd'}
` ` `
...
13.3.3 Making good use of configuration yaml header in index.Rmd file
See index.Rmd of this book and the other (forked) books in https://github.com/open-canada/
13.3.4 Conditional execution of chunks
13.3.4.1 From smltar book
Excerpt from https://github.com/open-canada/smltar/blob/master/index.Rmd