R (programovací jazyk)

R
Paradigmamultiparadigmatický, objektově orientovaný, imperativní, funkcionální, reflexní
VývojářR Core Team[1]
První vydánísrpen 1993[2]
Poslední verze3.6.2 „Dark and Stormy Night“ (12. prosince 2019[3])
Typová kontroladynamické
Ovlivněn jazykyCommon Lisp, S, Scheme,[2] XLispStat
Ovlivnil jazykyJulia[4]
LicenceGNU GPL v2[5]
Webr-project.org

R je programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení. Jde o implementaci programovacího jazyka S pod svobodnou licencí. Protože je zdarma, R již předstihlo počtem uživatelů komerční S a stalo se faktickým standardem v řadě oblastí statistiky.

Funkce prostředí R lze rozšířit pomocí knihoven označovaných jako balíčky (packages). Pro verzi 3.6.2 jich bylo v lednu roku 2020 v centrálním repozitáři CRAN k dispozici 15 325. Příkladem často používaného balíčku je ggplot2 pro zobrazení dat.

R se používá z příkazového řádku, existuje však několik frontendů s grafickým rozhraním jako RKWard, RStudio a R Commander.

R bývá také propojováno či využíváno v komerčním softwaru, např. v prostředí SPSS mohou uživatelé přímo psát a spouštět programy v jazyce R nad otevřenými daty.

Statistické funkce

R poskytuje širokou škálu statistických a grafických technik včetně lineárního a nelineárního modelování, klasických statistických testů, analýzy časových řad, shlukování a dalších. R je snadno rozšiřitelný pomocí funkcí a balíčků a R komunita je známá jejich aktivní aktualizací. Mnoho standardních funkcí R je psáno v samotném jazyku R, což usnadňuje uživatelům sledovat provedené algoritmické změny. Pro výpočetně náročné úlohy lze kód propojit s jazyky C, C++ a Fortran a zavolat je v době běhu. Pokročilí uživatelé mohou využívat jazyky C, C++, Java, .NET nebo Python k přímé manipulaci R objektů.

R je vysoce rozšiřitelný pomocí balíčků vytvořených samotnými uživateli obsahující konkrétní funkce, nebo využitelné v určitých oblastech studia. Díky svému dědictví z jazyka S má R silnější objektově orientované programování než většina ostatních statistických počítačových jazyků. Rozšíření R je také zjednodušeno díky využití lexikálních pravidel.

Další silnou stránkou R je statická grafika, která umí generovat grafy vhodné do vědeckých publikací zahrnující např. i matematické symboly. Dynamická a interaktivní grafika je dostupná prostřednictvím dalších balíčků.[6]

R má svůj vlastní formát dokumentace podobný LaTeXu, který nahrazuje kompletní dokumentaci, a to jak on-line, tak v mnoha formátech a v tištěné podobě.

Programovací funkce

R je interpretovaný jazyk, k němuž uživatelé obvykle přistupují pomocí příkazového řádku (interpret). Pokud uživatel zadá 2 + 2 do příkazového řádku R a potvrdí stisknutím↵ Enter, odpovědí počítače bude 4, jak je uvedeno níže:

> 2 + 2
[1]: 4

Tento výpočet je interpretován jako součet dvou jednoelementových vektorů, jehož výsledkem je také jednoelementový vektor. Předpona [1] označuje, že seznam prvků, které následují na stejném řádku, začíná prvním prvkem vektoru (funkce, která je užitečná, když je výstup na více řádků).

Stejně jako jiné podobné jazyky, jako je APL a MATLAB, R podporuje matice. Datová struktura programovacího jazyka R zahrnuje vektory, matice, datové rámce (podobné tabulkámrelační databázi) a listy. Rozšiřitelný objekt – systém R zahrnuje objekty pro (mimo jiné): regresní modely, časové řady a geo-prostorové souřadnice. Skalární datový typ nebyl nikdy implementován jako datová struktura v R, skaláry jsou zde reprezentovány jako vektory s délkou jedna.[7]

R podporuje procedurální programování s funkcemi, a pro některé funkce objektově orientované programování s generickými funkcemi. Generické funkce se chovají odlišně v závislosti na typu předaných argumentů k němu. Jinými slovy generická funkce odešle funkci specifickou pro daný typ objektu. Např. R má generickou funkci print (), která umožňuje vytisknout téměř každý druh objektu s jednoduchou print(JménoObjektu) syntaxí.

I když je většinou používán statistickými a jinými praktikami, které vyžadují prostředí pro statistické výpočty a vývoj softwaru, R může také fungovat jako výpočetní všeobecná matice – výkonností srovnatelné s GNU Octave nebo MATLAB.

Příklady

Základní syntaxe

Následující příklady ilustrují základní syntaxi jazyka a použití příkazového řádku R.

V R je široce preferovaný operátor pro přiřazení tvořící šipku ze dvou znaků <-, ačkoli stejně dobře lze použít=.[8]

Diagnostické grafy vytvořené funkcí plot.lm(). Vlevo dole je vidět i možnost použití matematických symbolů v popiscích os.
> x <- c(1,2,3,4,5,6) # Vytvoří uspořádaný soubor (vektor)
> y <- x^2 # Spočte druhé mocniny prvků x
> print(y) # vypíše (vytiskne) y
[1] 1 4 9 16 25 36
> mean(y) # Spočte aritmetický průměr prvků vektoru y; výsledkem je skalár
[1] 15.16667
> var(y) # Spočte rozptyl souboru
[1] 178.9667
> lm_1 <- lm(y ~ x) # Nafituje lineární regresi podle vztahů "y = f(x)" nebo "y = B0 + (B1 * x)"
                        # uloží výsledky jako lm_1
> print(lm_1) # Vytiskne model (objekt lineárního modelu) lm_1

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)            x
     -9.333        7.000

> summary(lm_1) # Spočte a vypíše statistiku pro regresi
                         # objektu lineárního modelu lm_1

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

> par(mfrow=c(2, 2)) # Nastaví rozložení grafu 2×2
> plot(lm_1) # Diagnostické vykreslení regresního modelu

Mandelbrotova množina

Mandelbrot.gif – na tento obrázek stačilo v tomto příkladu díky použití jazyka R pouze 14 řádek kódu.

Tento příklad, vykreslující Mandelbrotovu množinu, demonstruje:

  • Využití externích knihoven (packages), v tomto případě caTools package
  • Manipulaci s komplexními čísly
  • Vícerozměrná pole čísel používaných jako základní datový typ, viz proměnné C, ZX.
library(caTools) # Externí balík obsahující funkci write.gif
jet.colors <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan", "#7FFF7F",
                                 "yellow", "#FF7F00", "red", "#7F0000"))
m <- 1200 # definuje velikost
C <- complex( real=rep(seq(-1.8,0.6, length.out=m), each=m ),
              imag=rep(seq(-1.2,1.2, length.out=m), m ) )
C <- matrix(C,m,m) # převede na čtvercovou matici komplexních čísel
Z <- 0 # inicializuje Z jako 0
X <- array(0, c(m,m,20)) # inicializuje výstupní 3D pole
for (k in 1:20) { # cyklus s dvaceti průběhy
  Z <- Z^2+C             # klíčová rovnice měnící hodnotu Z
  X[,,k] <- exp(-abs(Z)) # záznam výsledku
}
write.gif(X, "Mandelbrot.gif", col=jet.colors, delay=1000)

Funkce

Jednoduchost vytváření funkcí je jednou z nejsilnějších možností využití R. Návratová hodnota lokální funkce může mít jakýkoliv datový typ.

functionname <- function(arg1, arg2,  ){ # deklarace funkce (jménem a argumenty)
statements # deklarace příkazů
return(object) # deklarace datového typu objektu
}

Teplotní mapa v R

Podrobnější informace naleznete v článku Teplotní mapa v R.

Balíčky

Schopnosti R jsou rozšířeny pomocí tzv. balíčků vytvořených samotnými uživateli, které umožňují využití specializovaných statistických nástrojů, grafického zobrazení (např. ggplot2), nástrojů na import / export dat, práci s daty v duchu filozofie tidy data (balíčky tidyverse, tidymodels), pro tvorbu reportů (knitr, Sweave), jiných způsobů programování (např. R6) atd. Tyto balíčky jsou vyvíjeny především v jazyku R, někdy však také v Javě, C, C++ nebo Fortranu.

Součástí instalace R je sada základních balíčků a dalších více než 11 000 dalších (k červenci 2017) je k dispozici na webových stránkách Comprehensive R Archive Network (CRAN),[9] Bioconductor,[10] Omegahat,[11] GitHub a dalších úložištích. Pro verzi 2.10 jich bylo v červenci 2009 v centrálním repozitáři CRAN k dispozici ne méně než 2 000.[12]

„Task Views“ (česky „Zobrazení úloh“)[13] – na internetových stránkách CRAN jsou vytvořeny manuály seskupující balíčky podle možného typu aplikace (např. finance, genetika, medicínské zobrazování, sociální vědy nebo prostorová analýza). Americký Úřad pro kontrolu potravin a léčiv (FDA) označil R jako vhodné také pro interpretaci dat z klinického výzkumu.

Další balíčky pro R můžeme najít také na stránkách Crantastic,[14] komunitního webu pro kontrolu a hodnocení všech balíčků CRAN a R-Forge,[15] centrální platformy pro spolupráci na vývoji balíčků R, softwarů souvisejících s R a dalších projektů. R-Forge obsahuje také mnoho nepublikovaných beta balíčků a vývojové verze balíčků CRAN.

Projekt Bioconductor poskytuje balíčky R pro analýzu genomických dat, jako Affymetrix a nástroje pro zpracování a analýzu cDNA microarray dat a začal poskytovat také nástroje pro analýzu dat z nové generace vysoce výkonných sekvenčních metod.

Další specializované a samostatně stojící balíčky lze nalézt volně na internetu nebo na univerzitních stránkách – pro výzkum fylogeneze a evoluce pomocí (nejen) genetických dat např. ape, pegas, Geneland,[16] phytools, phyloseq, Phyloch[17] nebo ParallelStructure.[18] Reprodukovatelný výzkum a automatické generování reportů může být provedeno s balíčky, které podporují využití kódu R implementovaného do LaTeXu, OpenDocument formátu atd.

Milníky

Kompletní seznam změn je udržován v NEWS souboru. Některé vlastnosti jsou uvedeny níže.

  • Verze 0.16 – Poslední alfa verze vyvinutá společností „Ihaka and gentleman“. Většina základních funkcí pochází z tzv. „Bílé knihy“ (viz jazyk S). Mailing konference byla spuštěna 1. dubna 1997.
  • Verze 0.49 (23. dubna 1997) – Jedná se o nejstarší verzi v CRAN repozitáři, která však byla přístupná pouze pro Unixové platformy. Alfa verze R pro Microsoft Windows a macOS byla spuštěna krátce po této verzi. CRAN repozitář byl k tomuto datu spuštěn se 3 zrcadly (mirrors), které zpočátku hostovaly 12 balíčků.
  • Verze 0.60 (5. prosince 1997) – R se stalo oficiální součástí projektu GNU. Kód je hostován a udržován na CVS.
  • Verze 1.0.0 (29. února 2000) – Podle vývojářů dostatečně stabilní pro produkční využití.
  • Verze 1.4.0 (19. prosince 2001) – Implementovány S4 metody; jde o první verze pro macOS.
  • Verze 2.0.0 (4. října 2004) – Přidáno tzv. „lazy loading“, které umožňuje rychlé načtení dat s minimálním zatížením paměti systému.
  • Verze 2.1.0 (18. dubna 2005) – Podpora kódování UTF-8 a počátky internacionalizace a lokalizace pro různé jazyky.
  • Verze 2.11.0 (22. dubna 2010) – Podpora pro 64bitové MS Windows.
  • Verze 2.13.0 (14. dubna 2011) – Přidání nové funkce kompilátoru, která umožňuje zrychlení funkcí pomocí převedení do bajtkódu.
  • Verze 2.14.0 (31. října 2011) – Přidány povinné namespaces u balíčků. Přidán nový balíček parallel.
  • Verze 2.15.0 (30. března 2012) – Nová load balancing funkce a zvýšená rychlost serializace pro dlouhé vektory.
  • Verze 3.0.0 – 3. dubna 2013 – Podpora pro číselné hodnoty indexu 231 a větších 64bitových systémech.

Rozhraní

Grafické uživatelské rozhraní (GUI)

  • RKWard – rozšiřitelné GUI a vývojové prostředí (IDE) pro R.
  • RStudio – multiplatformní open-source IDE (který může také být spuštěn na vzdáleném linuxovém serveru).
  • Deducer – GUI pro analýzu dat (podobně jako SPSS / JMP / Minitab).
  • Java GUI pro R – multiplatformní nezávislý terminál R a editor založený na Javě (také známý jako JGR).
  • Rattle GUI – multiplatformní open-source GUI založené na RGtk2 (R pro Gimp Tool Kit).
  • R Commander – multiplatformní GUI založeném na tcltk.
  • RExcel – propojení aplikace Microsoft Excel s jazykem R. Doplněk umožňující využívat R pro analýzu dat uložených v Excelu.[19]
  • RGUI – přichází s předkompilovanou verzí R pro Microsoft Windows.
  • RWe – umožňuje využití schopnosti dolování dat ve Weka a statistických analýz v R.
  • Tinn-R – open-source program zahrnující i vývojové prostředí se zvýrazněním syntaxe, podobně jako např. u MATLAB. K dispozici je však pouze pro MS Windows.
  • R Tools for Visual Studio – plugin pro MS Visual Studio, který umožňuje využití jazyka R.

Skriptovací jazyky

Funkce R byly zpřístupněny v několika skriptovacích jazycích jako je Python (balíček RPY), Perl (modul Statistics::R), Ruby (knihovna RSRuby), a F # (R Typ Provider). Skriptování v oblasti výzkumu samotném je možné prostřednictvím Littler, jakož i prostřednictvím RDEMO.

useR! konference

Oficiální mezinárodní setkání uživatelů R nese název „useR!“.

První useR! konference byla uspořádána v květnu roku 2004 ve Vídni. Po jednoletém vynechání (v roce 2005) se další uživatelské konference konají již každoročně, zpravidla střídavě v rámci Evropy a Severní Ameriky.

Další konference:

  • User! 2006, Vídeň, Rakousko
  • User! 2007, Ames, Iowa, USA
  • User! 2008, Dortmund, Německo
  • User! 2009, Rennes, Francie
  • User! 2010, Gaithersburg, Maryland, USA
  • User! 2011, Coventry, Velká Británie
  • User! 2012, Nashville, Tennessee, USA
  • User! 2013, Albacete, Španělsko
  • User! 2014, Los Angeles, USA

Srovnání s ostatními statistickými nástroji

Program R je srovnatelný s dalšími populárními statistickými nástroji jako je SAS, SPSS nebo Stata, avšak na rozdíl od nich je R k dispozici uživatelům bezplatně a využívá licenci svobodného software.

Komerční podpora programu R

Ačkoliv je R open-source projekt podporovaný komunitou pracující na jeho vývoji, některé komerční společnosti se snaží svým zákazníkům poskytnout technickou podporu nebo určitá rozšíření.

V roce 2007 byla založena firma Revolution Analytics, která poskytuje komerční podporu pro tzv. Revolution R (distribuci R zahrnující komponenty vyvinuté touto společností). Mezi hlavní přidané komponenty patří: ParallelR, R Productivity Environment IDE, RevoScaleR (pro analýzu velkých souborů dat), RevoDeployR, webový servis, a možnost čtení a zápisu dat ve formátu SAS. V roce 2015 společnost Microsoft odkoupila Revolution Analytics a následně implementovala jazyk R do programu Visual Studio 2017.

V roce 2011 společnost Oracle vytvořila systém Big dat Appliance, který integruje R, Apache Hadoop, Oracle Linux a NoSQL databázi s Exadata hardware. Oracle Enterprise R se stalo jedním ze dvou komponent „Oracle Advanced Analytics Option“ (druhou složkou je Oracle Data Mining).

K dalšímu komerčnímu software podporující napojení na nebo integraci do R patří: JMP, Mathematica, MATLAB, Pentaho, Spotfire, SPSS, STATISTICA, Platforma Symphony nebo SAS.

TIBCO, současný vlastník S-Plus jazyka, umožňuje svým zaměstnancům, aby aktivně podporovali výzkum s účastí v R-Help mailing listu (viz výše).

Google je velkým uživatelem R a vydává průvodce, sponzoruje výzkum v rámci projektu Summer-of-Code a také finančně podporuje uživatelská setkání.

RStudio nabízí software a služby pro R.

Odkazy

Reference

V tomto článku byl použit překlad textu z článku R (programming language) na anglické Wikipedii.

  1. HORNIK, Kurt. R FAQ [online]. 2017-10-04 [cit. 2018-01-30]. Dostupné online. (anglicky) 
  2. a b IHAKA, Ross. R : Past and Future History – A Draft of a Paper for Interface ’98 [PDF]. 1998 [cit. 2018-01-30]. Dostupné online. (anglicky) 
  3. The Comprehensive R Archive Network [online]. Rev. 2018-07-02 [cit. 2018-09-21]. Dostupné online. (anglicky) 
  4. Wayback Machine. Introduction — Julia Language 0.5.0-dev documentation [online]. [cit. 2018-01-30]. Archivovaná stránka. Dostupné v archivu pořízeném z originálu. (anglicky) 
  5. GNU GENERAL PUBLIC LICENSE Version 2 [online]. 1991-06 [cit. 2018-01-30]. Dostupné online. (anglicky) 
  6. LEWIN-KOH, Nicholas. CRAN Task View: Graphic Displays & Dynamic Graphics & Graphic Devices & Visualization. cran.r-project.org. 2015-01-07. Dostupné online [cit. 2018-09-21]. (anglicky)  Archivováno 27. 9. 2018 na Wayback Machine.
  7. WICKHAM, Hadley. Data structures. adv-r.had.co.nz [online]. [cit. 2018-02-20]. Dostupné online. (anglicky) 
  8. Assignments with the = Operator. developer.r-project.org [online]. Rev. 2001-12-16 [cit. 2018-09-21]. Dostupné online. (anglicky) 
  9. The Comprehensive R Archive Network. cran.r-project.org [online]. [cit. 2018-09-21]. Dostupné online. (anglicky) 
  10. Bioconductor - Home. www.bioconductor.org [online]. [cit. 2018-09-21]. Dostupné online. (anglicky) 
  11. The Omega Project for Statistical Computing. www.omegahat.net [online]. [cit. 2018-09-21]. Dostupné online. (anglicky) 
  12. SMITH, David. R's exponential package growth, ctd. Revolutions [online]. 2010-01-07 [cit. 2018-09-21]. Dostupné online. (anglicky) 
  13. CRAN Task Views. cran.r-project.org [online]. [cit. 2018-09-21]. Dostupné online. (anglicky) 
  14. It's crantastic!. crantastic.org [online]. [cit. 2018-09-21]. Dostupné v archivu pořízeném z originálu dne 2008-04-30. (anglicky) 
  15. R-Forge: Welcome. r-forge.r-project.org [online]. Rev. 2018-08-20 [cit. 2018-09-21]. Dostupné online. (anglicky) 
  16. Geneland homepage. www2.imm.dtu.dk [online]. [cit. 2018-09-21]. Dostupné v archivu pořízeném dne 2018-08-28. (anglicky) 
  17. Christoph Heibl -- R resources. www.christophheibl.de [online]. [cit. 2018-09-21]. Dostupné online. (anglicky) 
  18. R-Forge: parallelstructure: R Development Page. r-forge.r-project.org [online]. [cit. 2018-09-21]. Dostupné online. (anglicky) 
  19. ExcelTown.com. RExcel – Propojení Excelu s jazykem R [online]. [cit. 2018-09-21]. Dostupné online. 

Externí odkazy

Média použitá na této stránce

Plots from lm example.svg
Autor: Calimo, Licence: CC BY-SA 3.0
Plots produced by example code in R, using R version 2.9.1 and the Cairo package:
Mandelbrot Creation Animation.gif
(c) Jarekt, CC BY-SA 4.0

An animated diagram showing iterations of the equation used to generate the Mandelbrot set, a fractal first studied by Benoît Mandelbrot in 1979. The animation shows the values of Z for first 20 iterations of the equation

where c is a complex variable.

Mandelbrot set graphics are usually generated using the so-called "escape algorithm", where color is assigned according to the number of iterations it took for the equation to diverge past a pre-set limit, and black color is used for regions that never diverge. This, however, is a plot of a much simpler quantity: the actual values of the equation at the first 20 iterations. Every pixel in the image corresponds to a different value of a complex constant c ranging from -2.2 to 1 on the real axis (horizontal) and from -1.2i to 1.2i on the imaginary axis (vertical). Z is initialized to 0. At each iteration, the next value of Z is calculated using the equation above.

This graphic was generated with 13 lines of code in the R language (see below for the code). For each point, the magnitude (aka absolute value) of Z is calculated, than scaled using an exponential function to emphasize fine detail, and finally mapped to color palette (jetColors). Dark red is a very low number, dark blue is a very high number. The deep blue region "squeezing" in the boundaries of the fractal is the region where Z value diverges to infinity.