---
title: "Úvod do R Markdown"
author: "Karel Rečka"
date: "`r format(Sys.time(), '%d. %m. %Y')`"
output:
html_document:
toc: yes
toc_float: yes
toc_depth: 2
number_sections: yes
theme: readable
highlight: zenburn
bibliography: https://is.muni.cz/el/fss/podzim2022/PSYn5320/um/library.bib
csl: https://is.muni.cz/el/fss/podzim2022/PSYn5320/um/apa.csl
params:
class: 1
---
```{css, echo=FALSE}
.output-background {
background-color: #F6F6F6;
}
```
```{r setup, include = FALSE}
options(width = 90)
knitr::opts_chunk$set(
cache = TRUE,
fig.path = "figures/",
comment = "#>",
collapse = FALSE,
class.output = "output-background"
)
knitr::opts_template$set(
fullwidth = list(
fig.width = 10, fig.height = 6,
out.width = '100%'
)
)
fnum <- function(x, digits = 2) {
format(round(x, digits), nsmall = digits, big.mark = " ",
decimal.mark = ",")
}
```
# Použité balíčky
```{r packages, cache=FALSE, message=FALSE, warning=FALSE}
# Načtení potřebných balíčků
library(haven)
library(tidyverse)
library(DT)
```
# Import a příprava dat
```{r data-import, cache.extra = file.info("https://is.muni.cz/el/fss/podzim2022/PSYn5320/um/datasets/titanic.sav")}
# Import dat o pasažérech titanicu
titanic <- haven::read_spss(
"https://is.muni.cz/el/fss/podzim2022/PSYn5320/um/datasets/titanic.sav")
```
```{r data-preparation, dependson = "data-import"}
# Tranformace vybraných proměnných na faktory
titanic <- titanic %>%
mutate(
survived = factor(survived,
levels = 0:1,
labels = c("Died", "Survived")),
class = factor(class),
sex = factor(sex,
levels = c("male", "female"),
labels = c("Male", "Female"))
)
# Přehled výsledného datasetu
glimpse(titanic)
head(titanic)
```
# Formátování textu
## Odstavce a řádky
Ostavce oddělujte prázdnými
řádky; pouhé "odentrování" nevytvoří nový odstavec,
ale vše bude ve výsledném dokumentu v jednom odstavci textu.
Odstavec 1
Odstavec 2
Odstavec 3 atd.
Řádek můžete ukončit tím, že na jeho konci použijete dvakrát mezerník
(pouhé "odentrování" řádek ve výsledném dokumentu neukončí)
Tohle
bude
na
samostatných
řádcích.
Pro zvětšení mezery mezi odstavci použijte buďto `\` nebo `
` na samostatném
řádku, který nad sebou i pod sebou prázdný řádek. Můžeme použít např. pro
pro větší oddělení nadpisů na první úrovni.
Pokud používáte jako výstupní formát .doc, .pdf nebo .odt, můžete pomocí
`\newpage` vložit konec stránky (page break). U HTML to nemá moc smysl, protože
celý dokument je jeden spojitý celek, jedině kdybyste chtěli stránku tisknout.
\newpage
Odsazení textu můžeme zvětšit následovně:
| Malé odsazení textu
| Větší odsazení
| Ještě větší odsazení
## Zdůraznění textu
Když chcete něco napsat kurzivou, ohraničte to hvězdičkami nebo podtržítko
(underscore)
*toto bude kurzivou* a _toto bude také kurzivou_
Když chcete něco napsat tučně, použijte dvojité hvězdičky nebo podtržítko
(underscore)
**toto bude tučně** a __toto bude také tučně__
Kdybyste něco chtěli napsat kurzivou a zároveň tučně, použitje hvězdičky
nebo uderscore třikrát
***toto bude tučně + kurzivou*** a ___toto bude také tučně + kurzivou___
když chcete zdůraznit, že hovoříte o nějakém datovém objektu nebo kódu,
použijte zpětný apostrof
`data` `x <- c(0, 1, 2)`
horní a dolní index vytvoříte pomocí ^ a ~
SD^2^ H~2~0
## Nadpisy
Nadpisy můžete tvořit hashtagem #
# První úroveň nadpisu{-}
## Druhá úroveň nadpisu{-}
### Třetí úroveň nadpisu{-}
#### Čtvrtá úroveň nadpisu{-}
##### Pátá úroveň nadpisu{-}
###### Šestá úroveň nadpisu{-}
## Seznamy a odrážky
Nečíslované odrážky vytvoříte pomocí *, - nebo +
(nezapomeňte oddělit seznam prázdnými řákdy z obou stran)
* Položka 1
* Položka 2
- Položka 2A
+ Položka 2A I
+ Položka 2A II
- Položka 2B
Číslované odrážky vytvoříte takto, pokud vám stačí jedna úroveň
1. Položka 1
1. Položka 2
1. Položka 3
Nebo takto pro víceúrovňový číslovaný seznam
1. Položka 1:
1. Položka 1.1. (je nutné použít tabulátor dvakrát)
1. Položka 1.1.1. (je nutné použít tabulátor čtyřikrát)
1. Položka 1.2.
1. Položka 2
# Vkládání odkazů a obrázků
```{r download.image, include=FALSE}
download.file("https://is.muni.cz/el/fss/podzim2022/PSYn5320/um/rmeme.png",
"data/rmeme.png", method = "curl")
```
Webové odkazy a obrázky můžete vložit takto
* Vložením holého URL: https://google.com.
* Vložením URL s labelem [Google](https://www.google.com/).
Obrázky lze vložit podobně – pomocí URL odkazu nebo odkazu na lokální uložiště.
Velikost obrázku lze zmenšit např. přidáním `{width=50%}`
![Programming meme](data/rmeme.png){width=50%}
Větší flexibilitu v úpravě obrázku umožňuje funkce `knitr::include_graphics()`
v rámci bloku s kódem.
```{r datacamp-logo, opts.label='fullwidth'}
knitr::include_graphics("data/rmeme.png")
```
# Bloky kódu a jejich nastavení
Vložit blok kódu lze pomocí tlačítka v RStudiu (Insert code chunk) nebo pomocí
klávesové zkratky Ctrl + I.
Bloky kódu lze pojmenovat, což má několik výhod:
* Lepší navigaci pomocí osnovy vlevo dole.
* Vytvořené grafy budou mít srozumitelnější pojmenování.
* Lépe se lze odkazovat na jiné bloky kódu, např. v případě cachingu
(uložení výpočetně náročnějších operací, resp. jejich výstupů, do paměti).
První blok kódu by měl být vždy pojmenován `setup` a obsahovat globální
nastavení pomocí `knitr::opts_chunk$set()`. Tato nastevení převezmou všechny
bloky, ale lze jej přepsat, protože prioritu má lokální nastavení konkrétního
bloku.
Bloky kódu mají spoustu nastavení, nejčastěji měníme následující:
* `eval = FALSE` ukáže kód, ale nespustí jej, což se hodí, když chceme ukázat
pouze příklad kódu.
* `include = FALSE` spustí kód, ale skryje kód i jakýkoli výstup ve finálním
dokumentu. Hodí se, pokud obojí není pro analýzu relevantní (`setup`)
* `echo = FALSE` zobrazí pouze výstup, ale nikoli samotný kód. Hodí se,
pokud píšeme zprávu pro někoho, kdo se v R nevyzná, takže by mu R-kód stejně
nic neříkal.
* `message = FALSE` zakáže zobrazování (nevarovných) hlášení a `warning = FALSE`
zakáže zobrazování hvarovných hlášení ve finálním reportu.
* `results = "hide"` zakáže zobrahení konzolového výstupu a `fig.show = "hide"`
zakáže zobrazení grafického výstupu. `results = "hold"` umístí konzolový výstup
až za všechen R-kód v daném bloku a `fig.show = "hold"` udělá totéž pro graficý
výstup.
* `cached = TRUE` uloží výsledky daného bloku kódu do zvláštního souboru na disk.
Hodí se pro uložení výsledků výpočetně náročných operací.
Pokud nedojde k žádné změně v daném boku kódu, operace v něm definované se
nemusí spouštět znovu, ale její výsledky se načtou z disku.
* `dependson = "predchozi-blok-kodu"` řeší to, že výsledky bloku kódu mohou záviset
na předchozích blocích, ale kdybychom použili pouze `cached = TRUE`, kontrolují
se pouze změny v daném bloku kódu. Když použijeme `dependson` s názvem vybraného
předchozího bloku kódu, pak se `cached = TRUE` kontroluje i změny jiném uvedeném
bloku kódu.
* `cache.extra = file.info("externi_dataset.csv")` hlídá změny určeného externího
datového souboru.
Přehled nastavení můžete nalézt [zde](https://yihui.org/knitr/options/#chunk-options).
Zkuste změnit některá z těchto nastavení v následujícím bloku kódu
```{r survival-and-age, }
titanic %>%
group_by(class, sex) %>%
summarise(
prop_survived = mean(survived == "Survived")
)
titanic %>%
ggplot(aes(age)) +
geom_histogram()
```
Pokud chcete změnit defaultní (globální) nastavení pro bloky kódu, použijte funkci
`knitr::opts_chunk$set()` v rámci bloku `setup`. Pokud často přepisujete
více globálních nastavení, můžete si pomocí `knitr::opts_template$set` připravit
jejich set a pak jej vložit pomocí argumentu `opts.label='set_nastaveni'`v záhlaví
bloku kódu.
# Tabulky
Defaultní formát tabulek vypadá tak, jak jsme na něj zvyklí z R konzole.
Pro pěknější formát tabulek můžeme použít funkci `knitr::kable()`.
Interaktivní tabulky můžeme získat s využitím balíčku `DT` a funkce
`DT::datatable()`
```{r data-table}
# Defaultní tabulka
head(titanic)
# Tabulka s použitím funkce knitr::kable()
knitr::kable(
head(titanic),
caption = "Údaje o pasažérech Titaniku (kable)",
digits = 2
)
# Tabulka s použitím funkce DT::datatable()
DT::datatable(
titanic %>% select(id:age),
caption = "Údaje o pasažérech Titaniku (datatable)",
filter = list(position = 'top'),
options = list(pageLength = 5),
rownames = FALSE
)
```
Tabulky lze vytvořit i ručně takto.
Nadpis 1 | Nadpis 2 | Nadpis 3
----------|-----------|----------
a1 | a2 | a3
b1 | b2 | b3
Pravidla jsou tato:
* Tabulka musí mít záhlaví, které je odděleno např. pomocí "--------".
* Buňky musí být odděleny pomocí svislice "|".
* Použití "|" před prvním sloupcem a za posledním sloupcem není nutné.
* Není nutné dodržet vizuální zarovnání buněk.
Zarovnání lze měnit takto:
| nalevo | na střed | napravo |
|:-------|:--------:| -------:|
| 1 | 2 | 3 |
# Použití kódu přímo v textu
Dalším způsobem, jak vložit R kód, je použití `r `, viz následující příklad.
Máme údaje o `r nrow(titanic)` pasažérech Titanicu, ale pouze u
`r sum(!is.na(titanic$age))` pasažérů známe jejich věk.
Průměrný věk pasažérů Titanicu byl `r mean(titanic$age, na.rm = TRUE)`
(*SD* = `r sd(titanic$age, na.rm = TRUE)`) let.
Průměrný věk pasažérů Titanicu byl `r mean(titanic$age, na.rm = TRUE) %>% fnum()`
(*SD* = `r sd(titanic$age, na.rm = TRUE) %>% fnum()`) let.
# Grafy a parametry
Pomocí parametrů můžeme definovat klíčové vstupní hodnoty pro generování
výsledků (outputu). Parametry definujeme v záhlavní a pak je můžeme používat
jako argumenty různých funkcí.
```{r counts}
sex_count <- titanic %>%
filter(class == params$class) %>%
count(sex)
males <- sex_count %>% filter(sex == "Male") %>% pull(n)
females <- sex_count %>% filter(sex == "Female") %>% pull(n)
```
V `r params$class`. třídě cestovalo `r males` mužů a `r females` žen.
Graf podílu přeživších je zobrazen níže.
```{r survival-plot1}
p <- titanic %>%
filter(class == params$class) %>%
group_by(sex) %>%
summarise(prop_survived = mean(survived == "Survived")) %>%
ggplot(aes(sex, prop_survived)) +
geom_col() +
expand_limits(y = 1)
p
```
Rozměry grafů lze měnit pomocí argumentů `fig.width`, `fig.height`,
`fig.asp`, `out.width` a `out.height`.
Argumenty začínající na `fig.` mění velikost grafu vytvořeného v R,
zatímco argumenty začínající na `out.` mění velikost místa, do kterého
bude graf vložen.
Aby měly grafy konzistentní šířku, stačí nastavit pro všechny
stejnou `fig.width` (šířka grafu) a měnit podle potřeby `fig.asp` (poměr stran);
`fig.height` se tak nastaví automaticky jako `fig.width * fig.asp`.
Často je rozumné nastavení `fig.width = 6` (tj. 6 palců) a `fig.asp = 0.618`
(zlatý řez) společně s `out.width = "70%"` (tj. 70 % šířky odstavců) a
`fig.align = "center"` (zarovnání na střed).
Pro umístění více grafů na jeden řádek můžete např. nastavit `out.width = "50%"`,
pokud se jedná o dva grafy; pokud máte tři grafy, můžete nastavit `out.width = "33%"`;
pokud máte čtyři `out.width = "25%"`, ale nechat `fig.align = "default"`.
Mezi další důležitá nastavení patří:
* `fig.show = "hold"`: ukáže graf(y) až nakonec za celým blokem kódu.
* `fig.cap = "Popisek grafu"`: přidá ke grafu popisek
`fig.cap="Podíl přeživších"`
``` {r plot2, fig.width=2, fig.asp= 1, out.width="100%", fig.align='center', fig.cap="Podíl přeživších"}
p
```
# Citace
R Markdown umí používat různé formáty k tvorbě bibliografie, včetně
BiBLatex, BibTeX, endnote nebo medline.
Pokud chcete generovat citace balíčků v BibTeXu, můžete použít funkci
`knitr::write_bib(c("vektor", "s", "názvy", "balíčků), width = 60)`.
Zkuste takto vytvořit BibTex soubor pro balíčky, které jsme doposud používali,
např. ggplot2, dlyr nebo skimr.
Soubor se seznamem literatury v BibTexu se uvádí v záhlaví,
např. `bibliography: library.bib`. Stejně tak je nutné v se v záhlavní odkázat
na soubor `.csl` (citation style language), který definuje citační styl, např.
`csl: apa.csl`, defaultní je totiž styl *Chicago*.
Pro vložení citace použijte "@" společně s identifikátorem citace, např.
@r4ds nebo [@r4ds].
Citace lze upravovat např. takto:
* Pro vložení více citací za sebou použijte středník, např. takto: Lidé
začínající programovat v R mohou využít několik publikací [@r4ds; @hopr; @tidyverse].
* Do hranatých závorek lze doplnit libovolné komentáře
[@r4ds, pp. 20–30; @hopr, kapitola 2].
* Bez použití hranatých závorek se vytvoří citace přímo v textu, tj. jméno autora
nebo autorů bude před závorkouk a závorce bude uveden rok publikace, viz např.
@r4ds i @hopr představují dobré učebnice pro začátečníky v R.
* potlačit jméno autor lze pomocí "-": viz např. Garrett Grolemund [-@hopr] je
autorem knihy *Hands-On Programming with R*.
Seznam literatury se automaticky vloží na konec dokumentu, můžete ho vložit i na
jiné místo, pokud např. máte několik příloh, které chcete uvést až za seznamem
literatury. Stačí použít tento tag `