---
title: "Project Report Title"
author: "First Last"
date: last-modified
format:
html:
theme: cosmo # also try flatly or lumen
toc: true
toc-depth: 3
toc-location: left
number-sections: true
code-fold: false
code-tools: true
fig-cap-location: bottom
df-print: kable
embed-resources: true
bibliography: bibtex.bib
---
## Quarto Overview
Quarto combines markdown (an easy to write plain text format) with embedded
R code chunks. When compiling Quarto documents, the code components can be
evaluated so that both the code and its output can be included in the final
document. This makes analysis reports highly reproducible by allowing to automatically
regenerate them when the underlying R code or data changes. Quarto
documents (`.qmd` files) can be rendered to various formats including HTML and
PDF. The R code in an `.qmd` document is processed by `knitr`, while the
resulting `.md` file is rendered by `pandoc` to the final output formats
(_e.g._ HTML or PDF). Historically, Quarto is an extension of the older
`Sweave/Latex` environment. Rendering of mathematical expressions and reference
management is also supported by Quarto using embedded Latex syntax and
Bibtex, respectively. A new and related publishing environemt is [Quarto](https://quarto.org/docs/tools/neovim.html) (not covered here).
## Quick Start
### Install Quarto
To work with this tutorial, the `rmarkdown` package needs to be installed on a system.
```{r install_rmarkdown}
#| eval: false
install.packages("quarto")
```
### Initialize a new Quarto (`qmd`) script
To minimize typing, it can be helful to start with a Quarto template ([here](https://girke.bioinformatics.ucr.edu/GEN242/tutorials/quarto/quarto_index.html#metadata-section)) and
then modify it as needed. Note the file name of a Quarto scirpt needs to
have the extension `.qmd`. The template files for the following exercises are available
here:
+ Quarto sample script: [`sample.qmd`](https://raw.githubusercontent.com/tgirke/GEN242/refs/heads/main/tutorials/quarto/sample.qmd)
+ Bibtex file for handling citations and reference section: [`bibtex.bib`](https://raw.githubusercontent.com/tgirke/GEN242/refs/heads/main/tutorials/quarto/bibtex.bib)
Users want to download these files, open the `sample.qmd` file with their preferred R IDE
(_e.g._ RStudio, Nvim-R-Tmux or emacs), initilize an R session and then direct their R session to
the location of these two files.
### Metadata section
The metadata section (YAML header) in an Quarto script defines how it will be processed and
rendered. The metadata section also includes both title, author, and date information as well as
options for customizing the output format. For instance, PDF and HTML output can be defined
with `pdf_document` and `html_document`, respectively.
```
---
title: "Project Report Title"
author: "First Last"
date: last-modified
format:
html:
theme: cosmo # also try flatly or lumen
toc: true
toc-depth: 3
toc-location: left
number-sections: true
code-fold: false
code-tools: true
fig-cap-location: bottom
df-print: kable
embed-resources: true
bibliography: bibtex.bib
---
```
### Render `qmd` script
A Quarto script can be evaluated and rendered with the following `quarto_render` command or by pressing the `knit` button in RStudio.
The `output_format` argument defines the format of the output.
```{r render_rmarkdown, eval=FALSE, message=FALSE}
quarto::quarto_render("sample.qmd") # default format from YAML
quarto::quarto_render("sample.qmd", output_format="pdf")
```
The following shows how to render a `qmd` file from the command-line. To render to PDF format, use the argument setting: `output_format="pdf_document"` or `--to pdf` from R or command-line, respectively.
```{sh render_commandline}
#| eval: false
#| message: false
quarto render sample.qmd
quarto render sample.qmd --to pdf
```
### R code chunks
R Code Chunks can be embedded in a Quarto script by using three backticks
at the beginning of a new line along with arguments in the following lines starting
with `#|` that control the behavior of the code. The following lines contain the
plain R code. A code chunk is terminated by a new line starting with three backticks.
````{verbatim}
```{r code_chunk_name}
#| eval: false
x <- 1:10
```
````
The most important chunk options are:
+ `eval: true/false` — execute the chunk
+ `echo: true/false` — show the source code in the output
+ `warning: false` — suppress warnings
+ `message: false` — suppress messages
+ `cache: true` — cache results to speed up re-rendering
+ `fig-height: 4` — figure height in inches
+ `fig-width: 6` — figure width in inches
+ `fig-cap: "..."` — figure caption
+ `label: fig-name` — chunk label for cross-referencing (must start with `fig-` for figures)
For more details on chunk caching see the
[knitr cache documentation](https://bookdown.org/yihui/rmarkdown-cookbook/cache.html).
### Learning Markdown
Quarto uses standard Markdown for prose. The syntax is minimal and easy to learn:
+ [Quarto Markdown Basics](https://quarto.org/docs/authoring/markdown-basics.html)
+ [Markdown Intro on GitHub](https://guides.github.com/features/mastering-markdown/)
+ [Markdown Cheat Sheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)
+ [Quarto cheatsheet](https://rstudio.github.io/cheatsheets/quarto.pdf)
### Tables
There are several ways to render tables. First, they can be printed within the R code chunks. Second,
much nicer formatted tables can be generated with the functions `kable`, `kableExtra`, `pander` or `xtable`. The following
example uses `kable` from the `knitr` package.
### With `knitr::kable`
```{r kable}
library(knitr)
kable(iris[1:12,])
```
A much more elegant and powerful solution is to create fully interactive tables with the [`DT` package](https://rstudio.github.io/DT/).
This JavaScirpt based environment provides a wrapper to the `DataTables` library using jQuery. The resulting tables can be sorted, queried and resized by the
user. Note, Quarto source files containing JavaScript components can only be rendered into HTML and not PDF.
### With `DT::datatable`
```{r dt}
library(DT)
datatable(iris)
```
### Figures
Plots generated by the R code chunks in a Quarto document can be automatically
inserted in the output file. The size of the figure can be controlled with the `fig.height`
and `fig.width` arguments.
```{r some_jitter_plot}
#| eval: true
library(ggplot2)
dsmall <- diamonds[sample(nrow(diamonds), 1000), ]
ggplot(dsmall, aes(color, price/carat)) + geom_jitter(alpha = I(1 / 2), aes(color=color))
```
Sometimes it can be useful to explicitly write an image to a file and then insert that
image into the final document by referencing its file name in the R Markdown source. For
instance, this can be useful for time consuming analyses. The following code will generate a
file named `myplot.png`. To insert the file in the final document, one can use standard
Markdown or HTML syntax, _e.g._: `
`.
```{r some_custom_inserted_plot}
#| eval: true
#| warning: false
#| message: false
#| results: hide
png("myplot.png")
ggplot(dsmall, aes(color, price/carat)) + geom_jitter(alpha = I(1 / 2), aes(color=color))
dev.off()
```
