1 R Markdown
1.1 Mardown
“Markdown is a lightweight markup language for creating formatted text using a plain-text editor. John Gruber and Aaron Swartz created Markdown in 2004 as a markup language that is appealing to human readers in its source code form Markdown is widely used in blogging, instant messaging, online forums, collaborative software, documentation pages, and readme files.”
1.2 R Markdown, knit
Pozwala na elastyczne łączenie tekstu, Markdown, TeXa, R i html w jednym pliku i utworzenie dokumentu wyjściowego w formacie m.in. html i pdf (wszystkie laboratoria przygotowane zostały w ten sposób).
1.3 Pierwszy plik R Markdown
Z menu File
wybieramy New File
, a następnie
pozycję R Markdown
Powinien otworzyć się okno:
gdzie możemy nadać Tytuł tworzonego dokumentu oraz autora. Możemy też wybrać rodzaj dokumentu wyjściowego (zostawmy HTML, PDF wymaga zainstalowanego MiKTeXa - zobaczymy na miejscu czy działa).
Powinien utworzyć się nowy dokument, który obowiązkowo zapisujemy pod wybraną nazwą w osobnym folderze. Będziemy generować dodatkowe pliki, które automatycznie zapiszą się w tym folderze, więc wybór “Pulpitu” nie jest dobrym wyborem (choć nie zakazanym, po prostu zły pomysł). Powinno pojawić się nowe okno z przykładową treścią:
Po zapisaniu pliku klikamy przycisk
Knit
:
aby skompilować dokument. Po chwili powinno się pojawić okno wbudowanej przeglądarki z naszym dokumentem. Dokument ten (o ile nic nie zostało zmienione) powinien się też zapisać w tym samym folderze - plik HTML.
Obok przycisku Knit
znajduje się strzałka - umożliwia
kompilacje pliku do formatu pdf lub worda (sprawdzić, czy
działa).
1.3.1 Struktura pliku R Markdown
1.3.1.1 Preambuła w języku YAML
W górnej części automatycznie utworzonego pliku znajduje się
preambuła w języku YAML. Ograniczona jest dwoma zestawami po 3 minusy,
tj. ---
.:
---
title: "Mój tytuł"
author: "M B"
date: "29 11 2022"
output: html_document
---
Poszczególne elementy nie wymagają chyba komentarza.
Przydatne - aby automatycznie wstawiana była data z dnia kompilacji
dokumentu linijka date
powinna mieć postać:
Zadanie
Przeczytać o YAML:
1.3.1.2 Opcje dokumentu
Globalne ustawienia, fragment kodu:
#```{r setup, include=FALSE}
#knitr::opts_chunk$set(echo = TRUE)
#```
Parametr echo
odpowiada za wyświetlanie kodu. Zamiana na
FALSE spowoduje, że żaden kod R się nie wyświetli, a jedynie wyniki
działania tych kodów. Taka opcja została wykorzystana w niektórych
zadaniach jako przykładowe wyniki, by pokazać wynik działania kodu, ale
bez samego kodu.
Inne parametry:
#```{r setup, include=FALSE}
#knitr::opts_chunk$set(echo = TRUE, warning=FALSE, message =FALSE, eval=TRUE)
#```
warning
- w dokumencie wyjściowym nie będą wypisywane
ostrzeżenia (np. że jakichś danych brakuje)
message
- w dokumencie wyjściowym nie będą wypisywane
komunikaty typu że “pakiet blalblabla został zbudowany w wersji
1.1.1).
eval
- decyduje, czy kod R zostaje wykonany w dokumencie
R Markdown, czy też nie (sam tekst kodu, bez jego wykonania)
Elementy te można na koniec przetestować, jak już będziemy mieli jakiś własny kod.
1.3.1.3 Właściwy dokument
Dokument zawierający właściwą treść - przykładową można skasować :)
1.3.2 Edytor - tryb tekstowy i ‘visual’
Za pomocą skrótu klawiaturowego
Ctrl (lewy)+ Shift(lewy)+F4
możemy przełączyć edytor między
trybami tekstowym i ‘visual’. Ten drugi tryb jest nieco bardziej
intuicyjny, pozwala na proste wybranie Nagłówków, pogrubienia, itp
wstawianie obiektów oraz Tabele.
Najprostszy sposób przełączania między trybami to skorzystanie z przycisków:
Inny sposób przełączanie trybu tekstowego i ‘visual’ to przycisk
trybika koło przycisku Knit
:
1.3.2.1 Przydatne:
Wpisanie slasha:
/
w trybie ‘visual’ otwiera menu z dostępnymi elementami do wstawienia (nagłówki, tabele, kody…)
1.4 Wstawianie kodu w R do dokumentu
Kod R do dokumentu możemy wstawić na 2 sposoby
1.4.1 Krótka wstawka
W kodzie dokumentu możemy wstawić instrukcję R, w przykładzie
sample(1:6,1)
, otoczoną znakami `r
oraz
`
:
`r sample(1:6,1) `
gdzie ten “apostrof” to tzw. grawis, symbol ten najczęściej jest pod
znakiem Esc
na klawiaturze Windows (Mac-podobne urządzenia
mają ten klawisz w innym miejscu). Skompilowanie dokumentu skutkuje
tutaj zastąpieniem kodu wynikiem jego działania, tutaj wylosowaniem
liczby z zakresu od 1 do 6.
Zadanie:
Umieścić powyższy kod u siebie w dokumencie. Skompilować dokument. Sprawdzić “wylosowaną” wartość. Skompilować dokument ponownie - wylosowana wartość (w założeniu) powinna być inna niż poprzednio (z prawdopodobieństwem 1/6 możemy dostać znowu to samo - jeśli tak, to powtórzyć eksperyment).
1.4.2 Długa wstawka
Dłuższy kod R umieszczamy między znacznikami ```{r}
-
potrójny grawis, nawias klamrowy i litera r
oraz
```
- potrójny grawis:
```{r}
x=seq(0,2*pi,length.out=2*100)
y=sin(x) #komentarz, że liczymy sinusa
plot(x,y)
```
Po kompilacji powinniśmy znaleźć w dokumencie powyższy kod oraz skutek jego działania, czyli wykres.
Zadanie
Wypróbować powyższy kod w swoim dokumencie.
1.4.3 Zadanie
Jaki efekt będzie, gdy przy r
w powyższym kodzie dodamy
echo=FALSE
, a dokładniej:
```{r echo=FALSE}
x=seq(0,2*pi,length.out=2*100)
y=sin(x) #komentarz, że liczymy sinusa
plot(x,y)
```
Jest to opcja, gdy chcemy się podzielić wynikiem działania kodu R, ale sam kod chcemy ukryć.
Podobnie można w danej wstawce ustawić eval
,
warning
, message
w zależności od potrzeb.
1.4.4 Długa wstawka - guzik w RStudio
Łatwiej wstawić kod za pomocą przycisku
w górnej części okna, po prawej stronie. Jak widać, można dodawać kod także w innych językach.
Nie trzeba kompilować całego dokumentu za każdym razem, bieżący blok kodu możemy “uruchomić” zieloną strzałką po prawej stronie:
pojawi się też wynik działania kodu, tutaj wykres.
Przycisk obok zielnej strzałki:
pozwala na uruchomienie wszystkich bloków kodów powyżej (może się przydać, gdy inny blok ładuje na przykład biblioteki)
Zadanie:
Umieścić w swoim kodzie wybrany fragment z innego laboratorium (np. generowanie wykresu z zadania 5.1 z laboratorium 7, pamiętając o bibliotekach).
1.4.5 Wstawki R z błędami
Jeżeli wstawka R zawiera błędy, to cały dokument się nie skompiluje.
1.5 TeX w R Markdown
Kod TeXa możemy dodać w standardowy sposób, albo otaczając go pojedynczymi znakami dolara w przypadku wzoru w tekście lub podwójnymi znakami dolara, w przypadku gdy chcemy wzór wyeksponować:
Tekst z kodem jak niżej:
Funkcja $f \colon \mathbb{R} \to \mathbb{R}$ jest nieparzysta.
wyprodukuje nam linijkę postaci:
“Funkcja \(f \colon \mathbb{R} \to \mathbb{R}\) jest nieparzysta.”
Przykład wzoru wyeksponowanego:
$$
\left\{
\begin{array}{ccccccr}
x_1 &+&2x_2&+&5x_3&=&-4\\
3x_1 &+&x_2&-&4x_3&=&7\\
4x_1 &+&3x_2&+&x_3&=&3\\
-2x_1&-&2x_2&+&x_3&=&-3
\end{array}
\right.
$$
wyprodukuje nam:
\[ \left\{ \begin{array}{ccccccr} x_1 &+&2x_2&+&5x_3&=&-4\\ 3x_1 &+&x_2&-&4x_3&=&7\\ 4x_1 &+&3x_2&+&x_3&=&3\\ -2x_1&-&2x_2&+&x_3&=&-3 \end{array} \right. \]
UWAGA: Kliknięcie we wzór uruchomi tryb edycji równania
Praktyczna wskazówka:
W trybie “visual” RStudio zdarzają się pewne problemy z interpretacją wstawek TeXa. Może się zdarzyć, że kodu otoczonego dolarami edytor nie zamieni na wzór, zamiast tego zostanie nam np. coś takiego:
Wzór $\sin x$ - nie chce się wyświetlić prawidłowo.
W trybie edytora tekstowego znajdujemy problem - znaki dolara zostały zinterpretowane jako symbole, a nie znaczniki końca równania, o czym świadczą dodatkowe slashe przy tych znakach:
\$\\sin x\$
Rozwiązanie: w trybie tekstowym usunąć niepotrzebne slashe przed znakami dolara (UWAGA: przy sinusie też jest ekstra slash, też go trzeba usunąć).
Dzieje się tak, gdy chcemy sobie ułatwić życie i chcąc wstawić równanie w tekście (niewyeksponowane) od razu wpiszemy oba znaki dolara (otwierający i zamykający), a następnie wzór między tymi dolarami.
1.6 Wstawianie plików graficznych
Najłatwiejszy sposób na wstawienie grafiki to przeciągnięcie pliku graficznego z folderu (bieżącego) do okna RStudio w trybie “visual”
Zadanie:
Wstawić do swojego dokumentu dowolny obrazek
Po kliknięciu wstawionego obrazka mamy dostępne pewne opcje, taka jak
zmiana wysokości i szerokości obrazka, jednostka, lock ratio oraz
…
trzy kropki. Trzy kropki dają dostęp do dalszych opcji, w
tym umożliwiają nadanie wykresowi tytułu i opisu:
Link to
pozwala na dodanie adresu internetowego,
działającego po kliknięciu obrazka.
1.6.1 Wstawianie grafiki - drugi sposób
Inny sposób na wstawienie grafiki (oraz innych elementów) to użycie
Insert
:
albo ikonki obrazka.
1.6.2 Wstawianie grafiki - trzeci sposób
Wpisanie w trybie ‘visual’ znaku
/
rozwinie menu, które ma pozycję wstawiania obrazka…
1.7 Wstawianie kodu
W celach demonstracyjnych przydatna jest możliwość wstawienia kodu, który się nie wykona przy kompilacji (jak w tym pliku w celu wyjaśnienia, jak wstawić kod R). Kod taki jak niżej:
'r runif(50)'
wstawimy poprzez wybranie code block
z pierwszego menu
insert
.
Jeżeli powyższy kod wpiszemy bez code block
, to przy
kompilacji wykona się on i dostaniemy wynik jego działania
(Zadanie: sprawdzić co się stanie.).
1.8 Preambuła
W moim testowym pliku preambuła ma postać
---
title: "Mój tytuł"
author: "M B"
date: "29 11 2022"
output: html_document
---
Wybrane dodatki - sugeruję dodawanie elementów typu toc, theme itd po kolei. Ich opisy znajdują się poniżej. Uwaga: preambuła jest wrażliwa na wcięcia akapitowe itp. formatowanie.
---
title: "Mój tytuł"
author: "M B"
date: "29 11 2022"
output:
html_document:
toc: yes
theme: cerulean
highlight: tango
df_print: paged
code_folding: hide
---
Elementy, które można dodać to m.in.:
toc : yes
- toc = table of contents - spis treści, ale
umieszczony jako opcja dla html, tj.:
theme: cerulean
zmienia ogólny wygląd dokumentu. Galerie
theme można znaleźć np. pod adresem
niektóre dodatkowe theme
wymagają zainstalowania
dodatkowych pakietów i wymagają specjalnego wpisu w preambule, tj.
np:
output:
prettydoc::html_pretty:
theme: cayman
ale dzięki temu wygląd dokumentu staje się ciekawszy.
Zadanie:
przejrzeć materiały spod linku z theme
, zmienić
theme
swojego dokumentu.
highlight: tango
- zmienia kolorowanie składni w pliku
wyjściowym. Dostępne:
default
, tango
, pygments
,
kate
, monochrome
, espresso
,
zenburn
, haddock
, breezedark
oraz
textmate
df_print
- sposób wyświetlania ramek danych.
Zadanie:
Wstawić ramkę danych iris
do swojego dokumentu (bez
definiowania df_print
w preambule). W dokumencie wyjściowym
powinna pojawić się cała ramka.
Sprawdzić działanie opcji df_print
na argumentach
kable
, tibble
, paged
.
code_folding: hide
powoduje, że kod R jest umieszczony w
dokumencie, ale jest ukryty. Czytelnik dokumentu może “odkryć” ten kod.
Alternatywna wartość to code_folding: show
. Wtedy czytelnik
dokumentu widzi od razu kod programu, ale może go ukryć
1.9 R Markdown w trybie tekstowym
Za odpowiednie formatowanie tekstu w dokumencie wyjściowym odpowiedzialne są odpowiednie znaczniki (znaczniki działają też w trybie ‘visual’):
poprzedzenie tekstu znakiem
#
zmieni tekst na tytuł rozdziałupoprzedzenie tekstu znakiem
##
zmieni tekst na tytuł podrozdziałuitd aż do
6x #
wyróżnienie elementu następuje poprzez otoczenie go znakami gwiazdki
*
(pojedynczymi, podwójnymi…)otoczenie tekstu grawisami powoduje wyeksponowanie tekstu (szare pole)
wyliczenie powstaje poprzez rozpoczęcie nowej linii od gwiazdki
*
lub minusa-
link do strony www dodajemy poprzedzając go
http://
lubhttps://
1.10 Markdown i kod html
Możliwe jest użycie wielu elementów html, np. do zmiany czcionki czy jej koloru:
<span style="font-family: 'Comic Sans MS', 'Comic Sans'; color:red">Comic Sans przykład</span>
<span style="font-family: 'Times New Roman', serif; color:green">Times New Roman przykład</span>
<span style="font-family: Verdana; color:blue">Verdana przykład</span>
Zwykły przykład
da nam:
Comic Sans przykład Times New Roman przykład Verdana przykład Zwykły przykład
a kod
<ul>
<li>jeden</li>
<li>dwa</li>
<li>trzy</li>
</ul>
<ol style="list-style-type: lower-alpha;">
<li>lista a</li>
<li>lista b</li>
<li>lista c</li>
</ol>
da nam
- jeden
- dwa
- trzy
- lista a
- lista b
- lista c
1.11 Markdown a TeX i pdf
Powyżej umówiliśmy niektóre opcje HTML jako formatu wyjściowego. W przypadku pdf po dodatkowe opcje odsyłam do materiałów
https://bookdown.org/yihui/rmarkdown/pdf-document.html
warto zwrócić uwagę na sekcję dotyczącą keep_tex
, która
pozwala na zapisanie kodu TeXowego wygenerowanego dokumentu pdf - może
być przydatne np. do pracy magisterskiej.
Poza kodem zapisywane są też wykresy/rysunki, co też może być przydatne (oczywiście, każdy rysunek wygenerowany w R też możemy zapisać do pliku bezpośrednio, nie potrzebny jest Markdown).
1.12 Markdown a beamer (TeX)
Beamer to klasa TeXa służąca do przygotowywania prezentacji, więcej na
https://pl.wikipedia.org/wiki/Beamer_(LaTeX)
W przypadku R Mardown możemy wybrać opcje Presentation
a
następnie format pdf beamer
. W nowym dokumencie znajdzie
się przykład, który jako podstawa powinien zupełnie wystarczyć.
Mankament - standardowo generowana prezentacja jest “brzydka”.
2 Zadania
2.1 Zadanie 1
Przygotować dokument R Markdown na temat całki Riemanna korzystając z artykułu wikipedii, z uwzględnieniem elementów:
tytuł dokumentu, autor, data itp
wybrany
theme
żeby było kolorowopodanie źródła danych/materiałów
podział na sekcje/podsekcje (ze dwie)
formatowanie tekstu
wzory - mają być ładne, texowe
wstawić obrazek (z wiki, podając źródło)
2.2 Zadanie 2
Przygotować dokument R Markdown, który zaprezentuje połączenie tekstu ze wstawkami R. Inwencja własna, można wykorzystać wcześniejsze laboratoria. Wymaganie:
ma być wyjaśnione, co to jest ramka danych w R, jak ją stworzyć oraz przykład utworzenia ramki danych
opis, jak narysować wykres w
ggplot2
(jakiś prosty) + przykład takiego rysunku (wraz z kodem).zadbać o estetykę (tytuł, autor)