Writing dynamic and reproducible documents
An introduction to R Markdown / Quarto
Credit: Ignasi Bartomeus, PhD
0.1
1 How can you reproduce results?
1.1
1.2 What do we need to make research reproducible?
- Something to integrate text, figures and code
-
R
,Python
, etc
-
- Something that can be continuously edited and updated
- Living or dynamic document
- Something that can be easily used in versioning tools
- Git
1.3
1.4 Quarto ?
multi-language, next generation version of R Markdown
include many new new features and capabilities
Like R Markdown, Quarto uses knitr to execute R code, and is therefore able to render most existing Rmd files without modification.
1.5 R Markdown workflow
1.6 Quarto workflow
2 Structure of a Rmd/qmd document
2.1
2.2 Rmd/qmd document
2.3 Rmd/qmd document
3 Markdown
3.1 What is Markdown?
- A way to write stuff
- Mostly plain words, with some formating
3.2 Websites that use Markdown
- GitHub https://github.com/
- StackOverflow https://stackoverflow.com/
- HackMD https://hackmd.io
- Many more
3.3 Headers
- Use # to create headers
- Multiple #’s create lower level headers
3.4 Text
- Text is rendered as plain text
3.5 Lists
- Use asterisks to make bullet points
- Use numbers to make numbered lists
- Use 4 spaces or 1 tab for indentation
3.6 Hyperlinks
- To add a hyperlink, put your text between brackets
- Then place the URL between parentheses
3.7 Images
- Use a link preceded by an ! to insert an image
- The link text should be
- a URL if the image is hosted online
- a file path if the image is saved on your computer
3.8 Equations
- Write equations with Latex syntax
3.9 Equation blocks
3.10 Tables
| header A | header B | header C |
|:---------:|:--------:|---------:|
| left | center | right |
Table: This is a title
header A | header B | header C |
---|---|---|
left | center | right |
A bit of a hassle…
Wait for next section to learn how to generate tables from
R
3.11 R Markdown Reference Guide
https://rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf
4 Knitr Code chunks
4.1 Embed code
- Insert chunk of
R
code - Code will run and include results.
4.2 Inline code
- Place code in a sentence with
- Code will be replaced with results
4.3 Chunk options
Rmd (R markdown) and qmd (quarto) differ:
- Rmd: chunk options on one line between the {} after the r
- qmd: either as Rmd or within the chunk with yaml style notation
Rmd
```{r name, echo=FALSE}
1+1
```
Can lead to really long lines
qmd
```{r}
#| label: name
#| echo: false
1+1
```
takes more vertical space but cleaner
4.4 echo
-
echo = FALSE
or#| echo: false
hides code.
4.5 eval
-
eval = FALSE
or#| eval: false
prevents code from being run - No results is displayed, only code
4.6 fig.height, fig.width
- Specify dimension of plots (in inches) with fig.width and fig.height
- Separate multiple arguments with commas.
4.7 message
-
message = FALSE
or#| meassage: false
prevents messages from appearing in output
4.8 Default chunk options
Repeating chunk options can be painful
If you have
echo = FALSE
in every single chunk, how to set the default chunk option toecho = FALSE
?Use
knitr::opts_chunk$set(echo = FALSE)
You may overwrite the default for each chunk
For chunk options, check out https://yihui.name/knitr/options/
4.9 Including tables
# cars is a built-in-to-R data set of cars and their stopping distances
cars %>%
head(4) %>%
knitr::kable(format = "html", caption = "A kable table")
speed | dist |
---|---|
4 | 2 |
4 | 10 |
7 | 4 |
7 | 22 |
- The
kable
package is often used with thekableExtra
package - A number of other packages are available for making pretty tables, by far my favourite is
gt
using similar approach to table thatggplot
has to figures
4.10 R Markdown Reference Guide
https://rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf
5 YAML: Yet Another Markup Language
5.1 YAML in brief
Contains the metadata of the document
Starts and ends by three dashes
Comes first in the document
5.2 Simplest example
5.3 Knit
5.4 Output formats
5.5 Appearance and style
Rmd
In HTML output, you can use
theme
or a custom .css style sheettheme
options (bootswatch.com) : “cerulean”, “journal”, “flatly”, “darkly”, “readable”, “spacelab”, “united”, “cosmo”, “lumen”, “paper”, “sandstone”, “simplex”, “yeti”You may also use LaTeX templates with R Markdown, and write reproducible scientific paper
qmd
this is were Quarto is leaps beyong R markdown
excellent doc on the website
6 Managing bibliography
6.1 Reference file
- Put references in a plain text file with the extension .bib, in BibTex format (my advice: use Zotero and
betterbibtex
extension for dynamic file)
*@article{Shea2014,
author = {Shea, Nicholas and Boldt, Annika},
journal = {Trends in Cognitive Sciences},
pages = {186--193},
title = {{Supra-personal cognitive control}},
volume = {18},
year = {2014},
doi = {10.1016/j.tics.2014.01.006},
}
- Reference this file in your YAML header and add a csl style for formatting (browse through and download styles at zotero.org/styles)
---
title: "Citation test"
output: html_document
bibliography: example.bib
csl: my-style.csl
---
6.2 Citations
- In your text, citations go inside brackets and separated by semicolons
This…
Blah blah (Shea2014?, Lottridge2012?).
turns into this…
Blah blah (Shea et al. 2014; Lottridge et al. 2012).
6.3 Citations
- In your text, citations go inside brackets and separated by semicolons
This…
Blah blah (Shea2014?, Lottridge2012?).
(Shea2014?) says blah.
turns into this…
Blah blah (Shea et al. 2014; Lottridge et al. 2012).
Shea et al. (2014) says blah.
Blah blah (see Shea et al. 2014, 33–35; also Wu 2016, ch. 1).
6.4 Citations
For an easy way to insert citations, try the citr
RStudio add-in.
If you are using Zotero
, then RStudio can link directly for both Rmd and qmd files (same for VScode)
7 Notebook vs console in Rstudio
7.1 Notebook and console
In Rstudio, Rmarkdown file = notebook
Meaning that R output:
- are embedded in doc
- not available in R envir and console
If you don’t like the notebook and want the console, add to YAML header
editor_options:
chunk_output_type: console
7.2 Notebook
7.3 Console
7.4 R Markdown Reference Guide
https://rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf
8 What else can we do with R Markdown/ Quarto?
8.1 Let’s have a tour
8.2 To go further
Most of what works for R markdown works for Quarto
R Markdown cookbook
R Markdown Guide
Quarto website
9 Happy coding
I borrowed slides from Garrett Grolemund, Ulrik Lyngs, Olivier Gimenez . I also used the beautiful illustrations shared by Allison Horst