Úvod

“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.

Funkce kalkulačky

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.

Datové typy a zadávání dat

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).

Zadávání dat pomocí funkcí pro opakování

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 =.

Editace vektorů (souborů)

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)

Logické výrazy

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

Načtení dat z externího zdroje

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

Operace s tabulkou

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

Výběr v tabulce pomocí logických výrazů

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

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

Závěr

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