# Načtení potřebných balíčků
library(haven)
library(tidyverse)
library(DT)
# Import dat o pasažérech titanicu
<- haven::read_spss(
titanic "https://is.muni.cz/el/fss/podzim2022/PSYn5320/um/datasets/titanic.sav")
# 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)
#> Rows: 891
#> Columns: 12
#> $ id <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20…
#> $ survived <fct> Died, Survived, Survived, Survived, Died, Died, Died, Died, Survived,…
#> $ class <fct> 3, 1, 3, 1, 3, 3, 1, 3, 3, 2, 3, 1, 3, 3, 3, 2, 3, 2, 3, 3, 2, 2, 3, …
#> $ name <chr> "Braund, Mr. Owen Harris", "Cumings, Mrs. John Bradley (Florence Brig…
#> $ sex <fct> Male, Female, Female, Female, Male, Male, Male, Male, Female, Female,…
#> $ age <dbl> 22, 38, 26, 35, 35, NA, 54, 2, 27, 14, 4, 58, 20, 39, 14, 55, 2, NA, …
#> $ sib_spouse <dbl> 1, 1, 0, 1, 0, 0, 0, 3, 0, 1, 1, 0, 0, 1, 0, 0, 4, 0, 1, 0, 0, 0, 0, …
#> $ par_child <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 1, 0, 0, 5, 0, 0, 1, 0, 0, 0, 0, 0, 0, …
#> $ ticket <chr> "A/5 21171", "PC 17599", "STON/O2. 3101282", "113803", "373450", "330…
#> $ fare <dbl> 7.2500, 71.2833, 7.9250, 53.1000, 8.0500, 8.4583, 51.8625, 21.0750, 1…
#> $ cabin <chr> "", "C85", "", "C123", "", "", "E46", "", "", "", "G6", "C103", "", "…
#> $ port <chr> "S", "C", "S", "S", "S", "Q", "S", "S", "S", "C", "S", "S", "S", "S",…
head(titanic)
#> # A tibble: 6 × 12
#> id survived class name sex age sib_s…¹ par_c…² ticket fare cabin port
#> <dbl> <fct> <fct> <chr> <fct> <dbl> <dbl> <dbl> <chr> <dbl> <chr> <chr>
#> 1 1 Died 3 Braund, Mr. O… Male 22 1 0 A/5 2… 7.25 "" S
#> 2 2 Survived 1 Cumings, Mrs.… Fema… 38 1 0 PC 17… 71.3 "C85" C
#> 3 3 Survived 3 Heikkinen, Mi… Fema… 26 0 0 STON/… 7.92 "" S
#> 4 4 Survived 1 Futrelle, Mrs… Fema… 35 1 0 113803 53.1 "C12… S
#> 5 5 Died 3 Allen, Mr. Wi… Male 35 0 0 373450 8.05 "" S
#> 6 6 Died 3 Moran, Mr. Ja… Male NA 0 0 330877 8.46 "" Q
#> # … with abbreviated variable names ¹sib_spouse, ²par_child
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
<br>
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.
Odsazení textu můžeme zvětšit následovně:
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 ~
SD2 H20
Nadpisy můžete tvořit hashtagem #
Nečíslované odrážky vytvoříte pomocí *, - nebo + (nezapomeňte oddělit seznam prázdnými řákdy z obou stran)
Číslované odrážky vytvoříte takto, pokud vám stačí jedna úroveň
Nebo takto pro víceúrovňový číslovaný seznam
Webové odkazy a obrázky můžete vložit takto
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%}
Větší flexibilitu v úpravě obrázku umožňuje funkce
knitr::include_graphics()
v rámci bloku s kódem.
::include_graphics("data/rmeme.png") knitr
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:
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.
Zkuste změnit některá z těchto nastavení v následujícím bloku kódu
%>%
titanic group_by(class, sex) %>%
summarise(
prop_survived = mean(survived == "Survived")
)
#> `summarise()` has grouped output by 'class'. You can override using the `.groups`
#> argument.
#> # A tibble: 6 × 3
#> # Groups: class [3]
#> class sex prop_survived
#> <fct> <fct> <dbl>
#> 1 1 Male 0.369
#> 2 1 Female 0.968
#> 3 2 Male 0.157
#> 4 2 Female 0.921
#> 5 3 Male 0.135
#> 6 3 Female 0.5
%>%
titanic ggplot(aes(age)) +
geom_histogram()
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#> Warning: Removed 177 rows containing non-finite values (stat_bin).
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.
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()
# Defaultní tabulka
head(titanic)
#> # A tibble: 6 × 12
#> id survived class name sex age sib_s…¹ par_c…² ticket fare cabin port
#> <dbl> <fct> <fct> <chr> <fct> <dbl> <dbl> <dbl> <chr> <dbl> <chr> <chr>
#> 1 1 Died 3 Braund, Mr. O… Male 22 1 0 A/5 2… 7.25 "" S
#> 2 2 Survived 1 Cumings, Mrs.… Fema… 38 1 0 PC 17… 71.3 "C85" C
#> 3 3 Survived 3 Heikkinen, Mi… Fema… 26 0 0 STON/… 7.92 "" S
#> 4 4 Survived 1 Futrelle, Mrs… Fema… 35 1 0 113803 53.1 "C12… S
#> 5 5 Died 3 Allen, Mr. Wi… Male 35 0 0 373450 8.05 "" S
#> 6 6 Died 3 Moran, Mr. Ja… Male NA 0 0 330877 8.46 "" Q
#> # … with abbreviated variable names ¹sib_spouse, ²par_child
# Tabulka s použitím funkce knitr::kable()
::kable(
knitrhead(titanic),
caption = "Údaje o pasažérech Titaniku (kable)",
digits = 2
)
id | survived | class | name | sex | age | sib_spouse | par_child | ticket | fare | cabin | port |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Died | 3 | Braund, Mr. Owen Harris | Male | 22 | 1 | 0 | A/5 21171 | 7.25 | S | |
2 | Survived | 1 | Cumings, Mrs. John Bradley (Florence Briggs Thayer) | Female | 38 | 1 | 0 | PC 17599 | 71.28 | C85 | C |
3 | Survived | 3 | Heikkinen, Miss. Laina | Female | 26 | 0 | 0 | STON/O2. 3101282 | 7.92 | S | |
4 | Survived | 1 | Futrelle, Mrs. Jacques Heath (Lily May Peel) | Female | 35 | 1 | 0 | 113803 | 53.10 | C123 | S |
5 | Died | 3 | Allen, Mr. William Henry | Male | 35 | 0 | 0 | 373450 | 8.05 | S | |
6 | Died | 3 | Moran, Mr. James | Male | NA | 0 | 0 | 330877 | 8.46 | Q |
# Tabulka s použitím funkce DT::datatable()
::datatable(
DT%>% select(id:age),
titanic 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 |
Dalším způsobem, jak vložit R kód, je použití r
, viz
následující příklad.
Máme údaje o 891 pasažérech Titanicu, ale pouze u 714 pasažérů známe jejich věk.
Průměrný věk pasažérů Titanicu byl 29.6991176 (SD = 14.5264973) let.
Průměrný věk pasažérů Titanicu byl 29,70 (SD = 14,53) let.
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í.
<- titanic %>%
sex_count filter(class == params$class) %>%
count(sex)
<- sex_count %>% filter(sex == "Male") %>% pull(n)
males <- sex_count %>% filter(sex == "Female") %>% pull(n) females
V 1. třídě cestovalo 122 mužů a 94 žen.
Graf podílu přeživších je zobrazen níže.
<- titanic %>%
p 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"
p
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ř. Wickham & Grolemund (2017) nebo (Wickham & Grolemund, 2017).
Citace lze upravovat např. takto:
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
<div id="refs"></div>
a dát jej na místo, kam
seznam literatury chcete vložit.
Další možností, jak pracovat s R Markdownem, je použít R Notebook. R
Notebook je specifický způsob kompilace R Markdown souborů. Vytvoříte
jej pomocí File -> New File -> Notebook
nebo volbou
output: html_notebook
v záhlaví.
Hlavní rozdíly oproti standardnímu R Markdownu jsou následující:
output: html_notebook
, zatímco R Markdown může kompilovat
html, .doc, .pdf a další typy dokumentů.Protože lze snadno změnti R Notebook v R Markdown (stačí místo
output: html_notebook
v záhlavní uvést např.
output: html_document
) a protože práce s R Notebook je
obvykle o něco rychlejší, můžete klidně nejprve pracovat s R Notebookem
a až poté, ve konečné fázi psaní reportu, s R Markdownem.
Většina výstupních formátů podporuje číslování nadpisů/sekcí. Stačí
do záhlaví dolnit number_sections: true
. Pokud nechcete
vypnout číslování u některých nadpisů, doplňte za ně
{-}
.
Součástí záhlaví může být i r kód, můžete například nechat generovat datum automaticky na základě systémového času pomocí 24. 10. 2022.
Pomocí toc: true
zapnete zobrazení obsahu (table of
content); u HTML dokumentů funguje toc_float: true
, pokud
chcete interaktní (plovoucí) obsah. Pomocí toc_depth:
pak
lze nastavit, kolik úrovní nadpisů se má v obsahu zobrazovat.
Pomocí code_folding: hide
můžete defaultně skýr R kód;
pro jeho zobrazení je pak nutné si jej “rozkliknout”; a pomocí
code_folding: show
naopka umožníte skrýt defaultně
viditelný R kód.
R Markdown nabízí mnoho předdefinovaných themes, např.
theme: readable
. Podívejte se zde,
jak vypadají, a vyberte si nějaké, které se vám zdá atraktivní.