“R is a free software environment for statistical computing and graphics. It compiles and runs on a wide variety of UNIX platforms, Windows and MacOS.”
Takto popisuje R jeho oficiální webová prezentace (https://www.r-project.org/). R je pro všechny zdarma, i díky tomu se v posledních letech se stává více a více populární. Dnes je dostupné opravdu velké množství balíků, umožňujících nejrůznější výpočetní aplikace, ale i tvorbu map, webových stránek, prezentací a třeba i materiálů, jako je tento.
Po instalaci a spuštění R – doporučuji nainstalovat ještě RStudio (https://www.rstudio.com/), se zobrazí pouze kurzor; veškeré operace jsou prováděny pomocí zapisovaných příkazů. R je zejména skriptovací jazyk, v čemž je jeho síla – pokud pro požadovanou operaci neexistuje příkaz, můžeme si ji sami “napsat”.
R není komerčním softwarem, proto ho prosím citujte; správný tvar citace zjistíme příkazem
citation()
Poznámka: V tomto materiálu a stejně tak i v dalších jsou pro názornost uvedeny ukázky kódu (šedý rámeček) a výstupu (bílý rámeček). U některých příkladů není výstup zobrazen, popř. je zjednodušen.
Příkazová řádka R funguje jako “kalkulačka”. Každou zadanou operaci potvrdíme stiskem ENTER. Ukažme si pro ilustraci pár příkladů:
2+2
## [1] 4
Hodnota v hranatých závorkách určuje pořadí prvního prvku na daném řádku v souboru. Podobně lze počítat např. logaritmy
# Pozor, u logaritmů uvdějte vždy základ, výchozí nastavení je přirozený logaritmus
log(100,base=10)
## [1] 2
Poznámka: Mimo zadávání příkazů přímo do konzole lze vytvořit tzv. R script – předepsaný kód, který lze poté spouštět najednou, jako u jiných programovacích, resp. skriptovacích jazyků. Do tohoto scriptu lze přidávat komentáře pomocí znaku #, jak je uvedeno na předchozí ukázce. Tyto části kódu nejsou interpretovány a slouží pro vývojáře jako poznámky.
Podobně dávejte pozor při výpočtu goniometrických funkcí, do kterých se zadává hodnota v radiánech
sin(30);sin(pi/6)
## [1] -0.9880316
## [1] 0.5
Všimněme si navíc, že pokud oddělíme příkazy středníkem, provedou se jeden po druhém. Některé hodnoty, jako například \(\pi\) jsou v R taktéž předdefinovány. Pro více informací navštivte http://www.r-tutor.com/r-introduction, kde naleznete komplexní informace o základních konstrukcích jazyka R.
Ještě se zmíníme o dvou nezbytných operacích, a to druhá odmocnina sqrt() a mocnina x^y.
V R můžeme přiřadit hodnotu do paměti programu (pod libovolným názvem, velká písmena jsou rozlišována) a s tou pak nadále počítat, například
a<-2
b=3
a+b
## [1] 5
Všimněme si, že přiřazovat lze buď symbolem =, nebo šipkou <-. Pod zvolený název lze uložit kromě číselných hodnot i mnoho dalších typů dat, například text
text<-"Ucime se v R"
text
## [1] "Ucime se v R"
Pokud máme v paměti software jakoukoliv hodnotu, zobrazíme si ji zavoláním názvu, pod kterým je uložena, viz předchozí příklad.
Kromě jednotlivých hodnot můžeme do paměti ukládat soubory hodnot
# Hodnoty oddělujeme čárkou, desetinný znak je tečka
soubor<-c(1,3.5,7,9,23)
Hodnoty zadáváme pomocí příkazu c(). Nyní si můžeme vypočítat některé základní charakteristiky souboru
# Průměr a směrodatná odchylka
mean(soubor);sd(soubor)
## [1] 8.7
## [1] 8.570298
Poznámka: Vyzkoušejte si sčítání, odčítání a jiné operace se soubory (vektory).
Pokud potřebujeme vytvořit soubor (vektor) obsahující posloupnost či opakování, lze k tomu využít zjednodušujících funkcí – :, seq() či rep()
1:10
## [1] 1 2 3 4 5 6 7 8 9 10
seq(1,20,by=2)
## [1] 1 3 5 7 9 11 13 15 17 19
rep(c(1,2,3),5)
## [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
Funkce těchto příkazů je z příkladu zřejmá, seq(minimum, maximum, krok) tvoří sekvenci, rep(vektor, opakování) tvoří repetici. Zadání pomocí : tvoří sekvenci s krokem 1. Tyto vektory jsme si samozřejmě mohli uložit do paměti pomocí <- nebo =.
Vektory je možné libovolně upravovat. Pomocí indexu v hranatých závorkách si můžeme zobrazit jen požadované hodnoty. První hodnotu z výše vytvořeného vektoru soubor zobrazíme pomocí
soubor[1]
## [1] 1
Pomocí funkcí pro opakování zobrazíme první až třetí prvek
soubor[1:3]
## [1] 1.0 3.5 7.0
Odstranění (například druhého) prvku provedeme následovně (pomocí -)
soubor[-2]
## [1] 1 7 9 23
Přidání prvků (např. 100 a 200) provedeme buď pomocí append() nebo jednoduše pomocí c()
append(soubor, c(100,200))
## [1] 1.0 3.5 7.0 9.0 23.0 100.0 200.0
novy_soubor<-c(soubor,100,200)
R podporuje i logické výrazy, např.
# Všimněme si, že pro rovnost je používané dvojité rovnítko, protože jednoduché rovnítko je symbol pro přiřazení do paměti
2+3==6-1
## [1] TRUE
Takto lze ověřit určitou podmínku např. pro celý soubor (použijeme novy_soubor vytvořený v předchozím kroku)
novy_soubor>50
## [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE
R podporuje import dat z nejrůznějších formátů. My si ukážeme dva nejpoužívanější způsoby. První je pomocí tlačítka “Import dataset” v RStudiu. Tento způsob vás provede celým importem, například z .csv nebo .txt souboru (ne z Excelových souborů). Variantou tohoto způsobu je příkaz
tab<-read.table(file.choose(), header = T)
Tento příkaz otevře okno a umožní vám soubor vyhledat v adresáři počítače. Pro tento způsob je nejvhodnější mít připravená data v textovém souboru – formát .txt (MS-DOS).
Jednodušším způsobem je označení tabulky např. v Excelu, její zkopírování do schránky (CTRL+C) a následné použití příkazu
tab<-read.table("clipboard", header=T)
Oba tyto příkazy vytvoří tabulku (přesněji řečeno “data frame”) s názvem “tab”. Příkaz read.table slouží k přečtení tabulky. V jeho parametrech se specifikuje původ dat a dále, zda mají naše data hlavičku (předpoklad je, že ano, proto header=T – T jako “TRUE”).
Pokud proběhne vše v pořádku, máme v paměti R tabulku s názvem “tab”. Tu zobrazíme jejím zavoláním
tab
## ID var1 var2 text
## 1 1 54.0 3.00 prvni
## 2 2 65.0 6.00 druhy
## 3 3 89.0 4.00 treti
## 4 4 59.0 9.98 ctvrty
## 5 5 87.9 11.00 paty
Podobně jako u vektorů, nyní můžeme vybírat pouze některé hodnoty z tabulky pomocí indexů název[řádek,sloupec]. Takto vybereme např. 2. – 4. řádek z 2. sloupce
tab[2:4,2]
## [1] 65 89 59
Vynecháním jednoho indexu vybereme celý řádek či sloupec
# Pouze druhý sloupec
tab[,2]
## [1] 54.0 65.0 89.0 59.0 87.9
Přidání hodnot provedeme pomocí rbind() pro řádky a cbind() pro sloupce. Pro ukázku je zde připravena druhá tabulka “tab2”.
tab2
## ID var1 var2 text
## 1 6 23 34 sesty
## 2 7 57 11 sedmy
Tuto tabulku nyní přidáme k první a uložíme jako “tab3”
tab3<-rbind(tab,tab2)
tab3
## ID var1 var2 text
## 1 1 54.0 3.00 prvni
## 2 2 65.0 6.00 druhy
## 3 3 89.0 4.00 treti
## 4 4 59.0 9.98 ctvrty
## 5 5 87.9 11.00 paty
## 6 6 23.0 34.00 sesty
## 7 7 57.0 11.00 sedmy
Podobně můžeme přidat nový sloupec – opět lze spojit tabulky, tentokrát pomocí cbind(), nebo přidat vektor
tab4<-cbind(tab3,c(seq(7,49,by=7)))
tab4
## ID var1 var2 text c(seq(7, 49, by = 7))
## 1 1 54.0 3.00 prvni 7
## 2 2 65.0 6.00 druhy 14
## 3 3 89.0 4.00 treti 21
## 4 4 59.0 9.98 ctvrty 28
## 5 5 87.9 11.00 paty 35
## 6 6 23.0 34.00 sesty 42
## 7 7 57.0 11.00 sedmy 49
takto jsme přidali násobky 7 jako další sloupec. Všimněme si, že musíme ještě upravit název sloupce. To provedeme pomocí names(). Tento příkaz zobrazí hlavičku tabulky a umožní ji editovat jako každý jiný vektor.
names(tab4)
## [1] "ID" "var1" "var2"
## [4] "text" "c(seq(7, 49, by = 7))"
names(tab4)[5]<-"var3"
tab4
## ID var1 var2 text var3
## 1 1 54.0 3.00 prvni 7
## 2 2 65.0 6.00 druhy 14
## 3 3 89.0 4.00 treti 21
## 4 4 59.0 9.98 ctvrty 28
## 5 5 87.9 11.00 paty 35
## 6 6 23.0 34.00 sesty 42
## 7 7 57.0 11.00 sedmy 49
Změnu hodnot v tabulce provedeme pomocí jednoduchého indexování. Změňme například poslední hodnotu posledního sloupce (49) na 50.
tab4[7,5]<-50
tab4
## ID var1 var2 text var3
## 1 1 54.0 3.00 prvni 7
## 2 2 65.0 6.00 druhy 14
## 3 3 89.0 4.00 treti 21
## 4 4 59.0 9.98 ctvrty 28
## 5 5 87.9 11.00 paty 35
## 6 6 23.0 34.00 sesty 42
## 7 7 57.0 11.00 sedmy 50
Na sloupce či řádky tabulky můžeme odkazovat taktéž pomocí jejich názvu. K tomuto účelu slouží znak $. Vyberme si například data ze sloupce “var1” tabulky “tab4”.
tab4$var1
## [1] 54.0 65.0 89.0 59.0 87.9 23.0 57.0
Velmi často se stává, že potřebujeme vybrat pouze část tabulky, avšak na základě některých hodnot v ní obsažených. Jako příklad si ukážeme výběr záznamů z tabulky “tab4”, pro které je hodnota “var1” větší než 50 a hodnota “var3” větší než 20. Použijeme k tomu již zmíněných logických výrazů a příkaz subset()
subset(tab4,var1>50 & var3>20)
## ID var1 var2 text var3
## 3 3 89.0 4.00 treti 21
## 4 4 59.0 9.98 ctvrty 28
## 5 5 87.9 11.00 paty 35
## 7 7 57.0 11.00 sedmy 50
Znak & značí “a zároveň”. Podobně lze použít “nebo” pomocí znaku |. Samozřejmě existují i další logické operátory – více o nich například na http://www.statmethods.net/management/operators.html
Základní statistiky tabulky (data frame) – někdy taktéž označované jako explorační datová analýza (resp. její část) zobrazíme příkazem summary()
summary(tab4)
## ID var1 var2 text var3
## Min. :1.0 Min. :23.00 Min. : 3.00 ctvrty:1 Min. : 7.00
## 1st Qu.:2.5 1st Qu.:55.50 1st Qu.: 5.00 druhy :1 1st Qu.:17.50
## Median :4.0 Median :59.00 Median : 9.98 paty :1 Median :28.00
## Mean :4.0 Mean :62.13 Mean :11.28 prvni :1 Mean :28.14
## 3rd Qu.:5.5 3rd Qu.:76.45 3rd Qu.:11.00 treti :1 3rd Qu.:38.50
## Max. :7.0 Max. :89.00 Max. :34.00 sedmy :1 Max. :50.00
## sesty :1
Význam jednotlivých hodnot je zřejmý – jsou zobrazeny hodnoty minima, maxima, kvantilů, mediánu a průměru pro každý sloupec tabulky. Všimněme si hodnot ve sloupci “text”. Tato proměnná je kategoriální; jsou tedy zobrazeny počty výskytů každé kategorie (v našem případě je každá kategorie zastoupena jednou).
Poznámka: Dávejte pozor při načítání dat – pokud použijete jako desetinný znak čárku, hodnoty se načtou jako text a nelze s nimi dále počítat, proto vždy používejte tečku. Číselnou hodnotu lze uložit jako text a pak ji zase převést zpět. Konverzi datových typů si ukážeme níže
cislo<-10
# Hodnota (10) je uložena jako číslo, jde s ní tudíž kalkulovat
2*cislo
## [1] 20
# Nyní ji převedeme na text
text<-as.character(cislo)
# Zkusme si, že nyní nejsou výpočty možné. Převeďme text zpět na číslo
cislo2<-as.numeric(text)
cislo2+3
## [1] 13
Více informaci naleznete například na http://www.statmethods.net/management/typeconversion.html
Tento text slouží pouze pro základní orientaci při prvních krocích v R. V žádném případě není plnohodnotným učebním textem. Pro hlubší pochopení R lze doporučit “The R Book” (dostupné ve formátu .pdf), popřípadě některé internetové zdroje, například