Obsah
1. Programovací jazyk R (úvodní informace)
2. Popularita ekosystému postaveného okolo jazyka R
6. Instalace základních systémových balíčků jazyka R
7. Spuštění interaktivního prostředí se smyčkou REPL
8. Získání nápovědy a příkladů použití
10. Vybrané ukázky některých možností jazyka R
12. Alternativní způsob konstrukce vektoru
15. Balíček ggplot2, lineární regrese atd.
16. Spouštění skriptů psaných v R
17. Poznámka na závěr: seznamy v Pythonu versus vektory v R
18. Obsah následující části seriálu
19. Repositář s demonstračními příklady
1. Programovací jazyk R (úvodní informace)
V právě začínajícím seriálu se seznámíme s doménově specifickým jazykem (DSL) pojmenovaným jednoduše R. Tento jazyk se používá převážně pro (před)zpracování dat, jejich statistickou analýzu, včetně jejich grafického zobrazení, která je typicky následovaná zveřejněním na webu ve formě statické nebo interaktivní prezentace. Tento pro vývojáře dosti neobvyklý jazyk, který se vyvíjí již 27 let, je rozšířen i ve vědecké komunitě a na CRAN (Comprehensive R Archival Network) je pro něj zveřejněno přes 16000 balíčků s různými oblastmi zaměření. Na R je ovšem nejdůležitější nikoli vlastní jazyk, ale ekosystém, který je okolo něho postaven. Proto bude tento seriál zaměřen více na popis ekosystému spíše, než na podrobný popis syntaxe a sémantiky R.
Obrázek 1: Logo programovacího jazyka R.
2. Popularita ekosystému postaveného okolo jazyka R
Jazyk R byl představen již před 27 lety a i přesto, že se jednalo a stále jedná o velmi rozšířený jazyk v oblasti zpracování dat, statistických analýz a vizualizace výsledků, stále jde o doménově specificky jazyk, který se příliš nehodí pro vývoj obecných aplikací vhodných pro produkční nasazení. Proto by se podle všech předpokladů neměl tento jazyk umisťovat na předních místech žebříčku oblíbenosti, popř. míry používání programovacích jazyků. Ovšem letos se, pravděpodobně v souvislosti s koronavirem a studiemi, které zkoumaly jeho rozšiřování, popř. s výzkumem léčby, dostal jazyk R na výsluní a umístil se na viditelném místě ve všech známých žebříčcích: Tiobe Indexu, PYPLu, analýza Stack Overflow atd. (ovšem současně se umístil i na předních místech žebříčku obávaných jazyků. I proto nemusí být na škodu znát alespoň jeho základy.
Obrázek 2: Žebříček nejžádanějších jazyků.
Zdroj: https://fossbytes.com/stack-overflow-most-loved-dreaded-wanted-programming-languages-in-2020/
Obrázek 3: Žebříček nejoblíbenějších jazyků.
Zdroj: https://fossbytes.com/stack-overflow-most-loved-dreaded-wanted-programming-languages-in-2020/
Obrázek 4: Ovšem i žebříček nejděsivějších jazyků.
Zdroj: https://fossbytes.com/stack-overflow-most-loved-dreaded-wanted-programming-languages-in-2020/
Obrázek 5: Výsledky dostupné na PYPL.
Zdroj: https://pypl.github.io/PYPL.html
Obrázek 6: Tiobe Index.
Zdroj: https://www.tiobe.com/tiobe-index/
Obrázek 7: Historie oblíbenosti jazyka R na Tiobe Indexu.
Zdroj: https://www.tiobe.com/tiobe-index/
Obrázek 8: Jazyk R na RedMonku.
Zdroj: https://redmonk.com/
3. R, Python nebo Julia?
Mnoho potenciálních uživatelů jazyka R se (a to zcela logicky) ptá, zda je výhodnější používat R, Python (doplněný typicky o Matplotlib, NumPy a SciPy) nebo programovací jazyk Julia. Každý z těchto jazyků má některé výhody a pochopitelně i nevýhody. Julia je z této trojice zdaleka nejrychlejší, ovšem prozatím nemá tak propracovaný ekosystém, minimálně v porovnání s R nebo Pythonem. To se odráží i na počtu dostupných balíčků, nabídek IDE, dostupné literatury apod. Python představuje k R velkou konkurenci v oblasti ML a především NLP – opět díky dostupnosti knihoven a frameworků. Ovšem R vyhrává v počtu dostupných balíčků, existencí balíčku ggplot2 (ten si popíšeme v samostatném článku) a taktéž tím, že většina výzkumných článků používá právě tento jazyk. Navíc jazyk R obsahuje možnost tvorby interaktivních webových prezentací s (taktéž interaktivními) grafy vytvářenými s využitím Shiny (i této technologii bude věnován samostatný článek).
4. RStudio
V základních balíčcích s programovacím jazykem R nalezneme „pouze“ interaktivní smyčku REPL, která umožňuje dialog mezi uživatelem a ekosystémem R. Ovšem v praxi se většinou setkáme s použitím integrovaného vývojového prostředí (jehož nedílnou součástí je ovšem i REPL). V případě jazyka R je tímto IDE RStudio, které je volně dostupné a otevřené (což je důležité mj. i v akademické sféře) a pochopitelně je nabízeno i pro Linux. RStudio existuje ve dvou variantách. První varianta se jmenuje RStudio Desktop a jedná se o plnohodnotné desktopové vývojové prostředí. Druhá varianta nese název RStudio Server. Tato varianta, jak již její název naznačuje, běží na serveru, přičemž na straně klienta je použit WWW prohlížeč, se všemi výhodami a nevýhodami, které toto řešení přináší. V navazujících článcích si použití RStudia, přesněji řečeno jeho desktopové varianty, ukážeme.
Obrázek 9: Prostředí RStudia.
Obrázek 10: Prostředí RStudia.
5. R Markdown
Součástí ekosystému postaveného okolo programovacího jazyka R je i značkovací jazyk nazvaný R Markdown, který vychází z klasického Markdownu, ovšem navíc přidává možnost vkládat do dokumentu části skriptů psaných v R, které se vyhodnotí (včetně grafů) a zobrazí ve výsledném dokumentu (HTML, PDF, Word atd.). Navíc je možné s využitím Shiny a htmlwidgets vytvářet interaktivní dokumenty, což jsou vlastně živé prezentace s tabulkami a grafy. A právě existence Shiny s poměrně velkou pravděpodobností způsobila velký rozmach jazyka R v tomto roce v souvislosti s grafy a predikcemi šíření, popř. léčení koronaviru.
Obrázek 11: R Markdown notebook.
Zdroj: dokumentace k projektu dostupná na https://bookdown.org/yihui/rmarkdown/notebook.html
6. Instalace základních systémových balíčků jazyka R
Základní systémové balíčky programovacího jazyka R a vlastně i celého ekosystému postaveného okolo R bývají dostupné přímo v repositářích většiny mainstreamových distribucí Linuxu. Základní balíček s jeho závislostmi se většinou jmenuje R (pozor – použijte verzálku a ne minusku) a například na systému Fedora/RHEL lze nainstalovat přes DNF:
# dnf install R
Samotný balíček R má relativně velké množství závislostí, což je ostatně patrné i z následující obrazovky (instalace je provedena pro Fedoru server s X a Fluxboxem; na Fedora workstation je mnoho závislých balíčků již nainstalovaných):
Last metadata expiration check: 1:03:19 ago on Thu 27 Aug 2020 07:28:20 PM CEST. Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: R x86_64 4.0.2-1.fc32 updates 10 k Installing dependencies: R-core x86_64 4.0.2-1.fc32 updates 57 M R-core-devel x86_64 4.0.2-1.fc32 updates 88 k R-devel x86_64 4.0.2-1.fc32 updates 9.5 k R-java x86_64 4.0.2-1.fc32 updates 11 k R-java-devel x86_64 4.0.2-1.fc32 updates 10 k R-rpm-macros noarch 1.2.0-1.fc32 updates 11 k Transaction Summary ================================================================================ Install 407 Packages Total download size: 445 M Installed size: 1.3 G Is this ok [y/N]:
Po instalaci by měly být dostupné především dva příkazy R a Rscript, které využijeme v dalším textu.
7. Spuštění interaktivního prostředí se smyčkou REPL
Po instalaci R si můžeme vyzkoušet spuštění interaktivního prostředí tohoto programovacího jazyka, které je vybavené smyčkou REPL:
$ R R version 4.0.2 (2020-06-22) -- "Taking Off Again" Copyright (C) 2020 The R Foundation for Statistical Computing Platform: x86_64-redhat-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. >
Při ukončování REPLu se prostředí zeptá, zda se mají uložit informace o pracovním prostředí (environment, workspace), aby bylo možné při opětovném spuštění REPLu pokračovat v práci. Tento koncept si podrobněji vysvětlíme příště.
8. Získání nápovědy a příkladů použití
K balíčkům i k jednotlivým funkcím, které jsou dostupné, je možné zobrazit nápovědu, a to příkazem help. Pokud se tento příkaz (ve skutečnosti se jedná o funkci) zavolá bez parametrů, vypíšou se informace o způsobu jeho použití (volání):
> help()
S výsledkem:
help package:utils R Documentation Documentation Description: ‘help’ is the primary interface to the help systems. Usage: help(topic, package = NULL, lib.loc = NULL, verbose = getOption("verbose"), try.all.packages = getOption("help.try.all.packages"), help_type = getOption("help_type")) Arguments: topic: usually, a name or character string specifying the topic for which help is sought. A character string (enclosed in explicit single or double quotes) is always taken as naming a topic. If the value of ‘topic’ is a length-one character vector the topic is taken to be the value of the only element.
Zadat je možné i název funkce, popř. přesnou specifikaci balíčku (pokud existuje funkce se stejným jménem ve více balíčcích):
> help(sort)
sort package:base R Documentation Sorting or Ordering Vectors Description: Sort (or _order_) a vector or factor (partially) into ascending or descending order. For ordering along more than one variable, e.g., for sorting data frames, see ‘order’. Usage: sort(x, decreasing = FALSE, ...) ## Default S3 method: sort(x, decreasing = FALSE, na.last = NA, ...) sort.int(x, partial = NULL, na.last = NA, decreasing = FALSE, method = c("auto", "shell", "quick", "radix"), index.return = FALSE) Arguments: x: for ‘sort’ an R object with a class or a numeric, complex,
Zobrazit lze i příklady použití:
> example(sort) sort> require(stats) sort> x <- swiss$Education[1:25] sort> x; sort(x); sort(x, partial = c(10, 15)) [1] 12 9 5 7 15 7 7 8 7 13 6 12 7 12 5 2 8 28 20 9 10 3 12 6 1 [1] 1 2 3 5 5 6 6 7 7 7 7 7 8 8 9 9 10 12 12 12 12 13 15 20 28 [1] 3 2 5 5 1 6 6 7 7 7 7 8 7 8 9 9 10 12 12 12 12 20 28 13 15 sort> ## illustrate 'stable' sorting (of ties): sort> sort(c(10:3, 2:12), method = "shell", index.return = TRUE) # is stable $x [1] 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 $ix [1] 9 8 10 7 11 6 12 5 13 4 14 3 15 2 16 1 17 18 19
Vyhledávání v nápovědě a příkladech použití:
> apropos("sort") [1] ".doSortWrap" "is.unsorted" "sort" "sort.default" "sort.int" [6] "sort.list" "sort.POSIXlt" "sortedXyData"
9. Instalace RStudia
Pro práci s jazykem R se velmi často používá integrované vývojové prostředí nazvané RStudio. To lze nainstalovat buď opět z balíčků nabízených v repositářích Linuxové distribuce, nebo – pokud tato možnost neexistuje – lze na stránce https://rstudio.com/products/rstudio/download/ vybrat volně dostupnou verzi RStudia (RStudio Desktop with Open Source License) a na další stránce pak získat adresu s balíčkem kompatibilním s použitou distribucí Linuxu. Opět si ukažme instalaci provedenou pro Fedoru. K dispozici je balíček určený pro Fedoru 28, ovšem ten je použitelný i s novější verzí Fedory (konkrétně s Fedorou 32).
Nejdříve balíček stáhneme:
# wget https://download1.rstudio.org/desktop/centos7/x86_64/rstudio-1.3.1073-x86_64.rpm --2020-08-28 15:59:45-- https://download1.rstudio.org/desktop/centos7/x86_64/rstudio-1.3.1073-x86_64.rpm Resolving download1.rstudio.org (download1.rstudio.org)... 2600:9000:2111:9e00:10:3192:1100:93a1, 2600:9000:2111:1400:10:3192:1100:93a1, 2600:9000:2111:e00:10:3192:1100:93a1, ... Connecting to download1.rstudio.org (download1.rstudio.org)|99.86.116.95|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 146953448 (140M) [application/x-redhat-package-manager] Saving to: ‘rstudio-1.3.1073-x86_64.rpm’ rstudio-1.3.1073-x8 100%[===================>] 140.15M 33.8MB/s in 4.0s 2020-08-28 15:59:49 (34.9 MB/s) - ‘rstudio-1.3.1073-x86_64.rpm’ saved [146953448/146953448]
A posléze ho nainstalujeme příkazem rpm:
$ rpm -i rstudio-1.3.1073-x86_64.rpm
10. Vybrané ukázky některých možností jazyka R
V navazujících šesti kapitolách si ukážeme některé možnosti, které nám programovací jazyk R (a jeho knihovny) nabízí. Bude se skutečně prozatím jednat pouze o ukázky, protože v této chvíli neznáme syntaxi a sémantiku tohoto jazyka – ta bude popsána v dalších článcích. Ukázky je možné spustit buď přímo v rámci interaktivní smyčky REPL v R, nebo je možné stejné příkazy zadávat do RStudia (což je mnohem blíže tomu, jak se jazyk R používá v praxi).
11. Vektory
Jazyk R podporuje několik datových typů (seznam, pole, matice, tabulka, uzávěr, …), ovšem existuje mezi nimi jeden typ využívaný v prakticky všech skriptech a ve většině funkcí. Jedná se o vektory (vector), jejichž prvky mohou obsahovat logické hodnoty, celá čísla, čísla typu double, komplexní čísla, znaky atd. Takovým vektorům se někdy říká atomické. Zajímavé je, že když použijete číslo, popř. nějaká funkce číslo vrací, jedná se ve skutečnosti o vektor.
Vektory se vytváří z prvků konstruktorem nazvaným c. Výsledek (tedy zkonstruovaný vektor) je možné přiřadit nějaké proměnné pomocí = (méně často z důvodů, které si vysvětlíme příště) nebo <-:
> a <- c(1,2,3,4)
Vektor si můžeme vypsat:
> str(a) num [1:4] 1 2 3 4
A popř. zjistit jeho typ a třídu:
> typeof(a) [1] "double" > class(a) [1] "numeric"
Číslo je skutečně považováno za jednoprvkový vektor:
> c(1) + 10 [1] 11 > length(42) [1] 1
12. Alternativní způsob konstrukce vektoru
V případě, že má vektor obsahovat aritmetickou sekvenci, lze takový vektor zkonstruovat s využitím funkce seq, kterou si podrobněji popíšeme příště. Alternativně lze pro vektory se známou hodnotou prvního a posledního prvku (tj. obou mezních hodnot) použít operátor :, který odpovídá konstruktorům typu range v jiných programovacích jazycích:
> 1:4 [1] 1 2 3 4 > str(1:4) int [1:4] 1 2 3 4 > typeof(1:4) [1] "integer"
Základní použití funkce seq:
> seq(1,4) [1] 1 2 3 4 > seq(1,4,2) [1] 1 3 > seq(1,10,2) [1] 1 3 5 7 9 > seq(10,0) [1] 10 9 8 7 6 5 4 3 2 1 0
13. Grafy
Velmi silnou stránkou programovacího jazyka R je tvorba grafů, která je většinou velmi intuitivní. Tvorbou grafů se budeme podrobněji zabývat v samostatném článku, takže dnes si uvedeme jen několik malých ukázek.
První graf bude obsahovat průběh funkce sinus, ovšem tento průběh je nahrazen jednotlivými body, protože graf vytvořený funkcí plot, které předáme vektory s x-ovými a y-ovými souřadnicemi, vytvoří graf s nepospojovanými body [xi, yi]:
x <- 1:100 y <- sin(x/10) plot(x,y)
Zkrácený zápis:
plot(sin(1:100/10))
Obrázek 12: Body ležící na průběhu funkce sinus.
Lissajousův obrazec:
plot(sin(1:1000/3), cos(1:4000/4))
Obrázek 13: Výsledek předchozího příkladu.
Skutečný graf s průběhem funkce sin:
plot(sin, from=0, to=2*pi)
Obrázek 14: Průběh funkce sinus.
14. Histogramy
Vytvořit je možné i histogram, a to pomocí funkce hist. Ukažme si jednoduchý histogram s hodnotami produkovanými funkcí sinus:
hist(sin(1:n * 2*pi/n))
Obrázek 15: Histogram.
15. Balíček ggplot2, lineární regrese atd.
Jedním z důležitých balíčků připravených pro ekosystém jazyka R je balíček nazvaný ggplot2, který lze nainstalovat například příkazem:
< install.packages("ggplot2"))
„gg“ v názvu tohoto balíčku znamená „grammar of graphics“, protože grafy mají vlastní sémantiku (osy, popisky, průběhy hodnot atd). Tento balíček později využijeme při složitějších vizualizacích.
Ještě si dnes ukažme použití funkce lm, která dokáže vypočítat lineární regresi (proložení naměřených či vypočtených bodů přímkou) a navíc i odchylky atd. Tento příklad byl převzat z Wikipedie a snažíme se v něm proložit hodnoty 12, 22, až 62:
> x <- 1:6 # Create vector. > y <- x^2 # Create vector by formula. > model <- lm(y ~ x) > print(model) Call: lm(formula = y ~ x) Coefficients: (Intercept) x -9.333 7.000 > summary(model) Call: lm(formula = y ~ x) Residuals: 1 2 3 4 5 6 3.3333 -0.6667 -2.6667 -2.6667 -0.6667 3.3333 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -9.3333 2.8441 -3.282 0.030453 * x 7.0000 0.7303 9.585 0.000662 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 3.055 on 4 degrees of freedom Multiple R-squared: 0.9583, Adjusted R-squared: 0.9478 F-statistic: 91.88 on 1 and 4 DF, p-value: 0.000662
Obrázek 16: Vizualizovaný model vytvořený funkcí lm.
Obrázek 17: Vizualizovaný model vytvořený funkcí lm pro odlišný vstup.
16. Spouštění skriptů psaných v R
Ještě se zmiňme o tom, jakým způsobem se spouští skripty psané v jazyku R. Můžeme je spouštět přímo v rámci interaktivní smyčky REPL (které předáme přesměrovaný vstup):
$ R < 10_lm_plots.R
Ve skutečnosti ovšem budeme muset specifikovat, jestli se má při ukončování REPLu ukládat informace o pracovním prostředí. Reálné spuštění skriptu tedy bude vypadat následovně:
$ R --vanilla < 10_lm_plots.R
Alternativně je možné použít příkaz RScript, kterému se přímo (bez přesměrování) předá název souboru se skriptem:
$ Rscript 10_lm_plots.R
17. Poznámka na závěr: seznamy v Pythonu versus vektory v R
Na závěr se zmiňme o jednom z rozdílů mezi seznamy v Pythonu a vektory v jazyku R, a to z toho důvodu, že se mnohdy tyto dva jazyky používají současně. V Pythonu jsou vektory měnitelnými (mutable) datovými strukturami a navíc se jedná o typ dat, který není uložen přímo v proměnné – proměnná ve skutečnosti obsahuje odkaz (referenci) na seznam. To může vést k tomu, že zdánlivá změna jediné proměnné ve skutečnosti vede i ke změně proměnné druhé (protože obě proměnné referencují stejný měnitelný seznam):
>>> x=[1,2,3] >>> y=x >>> y+=[4] >>> x==y True >>> x [1, 2, 3, 4] >>> y [1, 2, 3, 4]
V R namísto toho přidáním prvku do vektoru y nezměníme vektor x:
> x=c(1,2,3) > y=x > y=append(y,4) > identical(x,y) [1] FALSE
18. Obsah následující části seriálu
V navazující části nového seriálu se seznámíme s některými základními koncepty, na nichž je programovací jazyk R postaven. Zejména si popíšeme podporované datové typy, základní funkce určené pro operaci s vektory a maticemi i některé řídicí příkazy (i když je nutné říci, že se v jazyku R řídicí struktury, především programové smyčky, používají méně často, než je tomu v běžných programovacích jazycích). Všechny příklady budou koncipovány tak, že je bude možné spustit jak v interaktivní smyčce REPL, tak i v prostředí RStudia.
19. Repositář s demonstračními příklady
Zdrojové kódy všech dnes použitých demonstračních příkladů byly uloženy do nového Git repositáře, který je dostupný na adrese https://github.com/tisnik/r-examples V případě, že z nějakého důvodu nebudete chtít klonovat celý repositář (ten je ovšem – alespoň prozatím – velmi malý, dnes má jen jednotky kilobajtů), můžete namísto toho použít odkazy na jednotlivé demonstrační příklady, které naleznete v následující tabulce:
20. Odkazy na Internetu
- The R Project for Statistical Computing
https://www.r-project.org/ - An Introduction to R
https://cran.r-project.org/doc/manuals/r-release/R-intro.pdf - R (programming language)
https://en.wikipedia.org/wiki/R_(programming_language) - The R Programming Language
https://www.tiobe.com/tiobe-index/r/ - R Markdown
https://rmarkdown.rstudio.com/ - R Markdown: The Definitive Guide
https://bookdown.org/yihui/rmarkdown/ - R Markdown Cheat Sheet
https://rstudio.com/wp-content/uploads/2016/03/rmarkdown-cheatsheet-2.0.pdf - Introduction to R Markdown
https://rmarkdown.rstudio.com/articles_intro.html - R Cheat Sheets
https://blog.sergiouri.be/2016/07/r-cheat-sheets.html - R Cheat Sheet
https://s3.amazonaws.com/quandl-static-content/Documents/Quandl±+R+Cheat+Sheet.pdf - Base R Cheat Sheet
https://rstudio.com/wp-content/uploads/2016/06/r-cheat-sheet.pdf - PYPL PopularitY of Programming Language
https://pypl.github.io/PYPL.html - Tiobe index
https://www.tiobe.com/tiobe-index/ - Stack Overflow: Most Loved, Dreaded & Wanted Programming Languages In 2020
https://fossbytes.com/stack-overflow-most-loved-dreaded-wanted-programming-languages-in-2020/ - How to Install and Use R on Ubuntu
https://itsfoss.com/install-r-ubuntu/ - R programming for beginners – Why you should use R
https://www.youtube.com/watch?v=9kYUGMg_14s - GOTO 2012 • The R Language The Good The Bad & The Ugly
https://www.youtube.com/watch?v=6S9r_YbqHy8 - R vs Python – What should I learn in 2020? | R and Python Comparison
https://www.youtube.com/watch?v=eRP_J2yLjSU - R Programming 101
https://www.youtube.com/c/rprogramming101 - Seriál Tvorba grafů pomocí programu „R“
https://www.root.cz/serialy/tvorba-grafu-pomoci-programu-r/ - Tvorba grafů pomocí programu „R“: úvod
https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-1/ - Tvorba grafů pomocí programu „R“: pokročilé funkce
https://www.root.cz/clanky/tvorba-grafu-pomoci-programu-r-pokrocile-funkce/ - Tvorba grafů pomocí programu „R“: vkládání textu, čeština
https://www.root.cz/clanky/grafy-pomoci-programu-r-vkladani-textu-cestina/ - V indexu popularity programovacích jazyků TIOBE překvapilo R, Go, Perl, Scratch a Rust
https://www.root.cz/zpravicky/v-indexu-popularity-programovacich-jazyku-tiobe-prekvapilo-r-go-perl-scratch-a-rust/ - Is R Programming SURGING in Popularity in 2020?
https://www.youtube.com/watch?v=Duwn-vImyXE - Using the R programming language in Jupyter Notebook
https://docs.anaconda.com/anaconda/navigator/tutorials/r-lang/ - Using R on Jupyter Notebook
https://dzone.com/articles/using-r-on-jupyternbspnotebook - Graphics, ggplot2
http://r4stats.com/examples/graphics-ggplot2/ - A Practice Data Set
https://r4stats.wordpress.com/examples/mydata/ - Shiny – galerie projektů
https://shiny.rstudio.com/gallery/ - Seriál Programovací jazyk Julia
https://www.root.cz/serialy/programovaci-jazyk-julia/ - Julia (front page)
http://julialang.org/ - Julia – repositář na GitHubu
https://github.com/JuliaLang/julia - Julia (programming language)
https://en.wikipedia.org/wiki/Julia_%28programming_language%29 - IJulia
https://github.com/JuliaLang/IJulia.jl - Introducing Julia
https://en.wikibooks.org/wiki/Introducing_Julia - Julia: the REPL
https://en.wikibooks.org/wiki/Introducing_Julia/The_REPL - Introducing Julia/Metaprogramming
https://en.wikibooks.org/wiki/Introducing_Julia/Metaprogramming - Month of Julia
https://github.com/DataWookie/MonthOfJulia - Learn X in Y minutes (where X=Julia)
https://learnxinyminutes.com/docs/julia/ - New Julia language seeks to be the C for scientists
http://www.infoworld.com/article/2616709/application-development/new-julia-language-seeks-to-be-the-c-for-scientists.html - Julia: A Fast Dynamic Language for Technical Computing
http://karpinski.org/publications/2012/julia-a-fast-dynamic-language - The LLVM Compiler Infrastructure
http://llvm.org/ - Julia: benchmarks
http://julialang.org/benchmarks/ - R Vector
https://www.datamentor.io/r-programming/vector/ - .R File Extension
https://fileinfo.com/extension/r - Lineární regrese
https://cs.wikipedia.org/wiki/Line%C3%A1rn%C3%AD_regrese - lm (funkce)
https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/lm - quit (funkce)
https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/quit - c (funkce)
https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/c - help (funkce)
https://www.rdocumentation.org/packages/utils/versions/3.6.2/topics/help - Shiny: Introduction to interactive documents
https://shiny.rstudio.com/articles/interactive-docs.html - R Release History 1997–2013
http://timelyportfolio.github.io/rCharts_timeline_r/ - R: atomic vectors
https://renenyffenegger.ch/notes/development/languages/R/data-structures/vector/ - 11 Best R Programming IDE and editors
https://www.dunebook.com/best-r-programming-ide/ - CRAN – The Comprehensive R Archive Network
https://cran.r-project.org/