R (programovací jazyk)
Paradigma | multiparadigmatický, objektově orientovaný, imperativní, funkcionální, reflexní |
---|---|
Vývojář | R Core Team[1] |
První vydání | srpen 1993[2] |
Poslední verze | 3.6.2 „Dark and Stormy Night“ (12. prosince 2019[3]) |
Typová kontrola | dynamické |
Ovlivněn jazyky | Common Lisp, S, Scheme,[2] XLispStat |
Ovlivnil jazyky | Julia[4] |
Licence | GNU GPL v2[5] |
Web | r-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ám v relač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]
> 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
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, Z a X.
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
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.
- ↑ HORNIK, Kurt. R FAQ [online]. 2017-10-04 [cit. 2018-01-30]. Dostupné online. (anglicky)
- ↑ 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)
- ↑ The Comprehensive R Archive Network [online]. Rev. 2018-07-02 [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ 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)
- ↑ GNU GENERAL PUBLIC LICENSE Version 2 [online]. 1991-06 [cit. 2018-01-30]. Dostupné online. (anglicky)
- ↑ 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.
- ↑ WICKHAM, Hadley. Data structures. adv-r.had.co.nz [online]. [cit. 2018-02-20]. Dostupné online. (anglicky)
- ↑ Assignments with the = Operator. developer.r-project.org [online]. Rev. 2001-12-16 [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ The Comprehensive R Archive Network. cran.r-project.org [online]. [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ Bioconductor - Home. www.bioconductor.org [online]. [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ The Omega Project for Statistical Computing. www.omegahat.net [online]. [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ SMITH, David. R's exponential package growth, ctd. Revolutions [online]. 2010-01-07 [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ CRAN Task Views. cran.r-project.org [online]. [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ It's crantastic!. crantastic.org [online]. [cit. 2018-09-21]. Dostupné v archivu pořízeném z originálu dne 2008-04-30. (anglicky)
- ↑ R-Forge: Welcome. r-forge.r-project.org [online]. Rev. 2018-08-20 [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ Geneland homepage. www2.imm.dtu.dk [online]. [cit. 2018-09-21]. Dostupné v archivu pořízeném dne 2018-08-28. (anglicky)
- ↑ Christoph Heibl -- R resources. www.christophheibl.de [online]. [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ R-Forge: parallelstructure: R Development Page. r-forge.r-project.org [online]. [cit. 2018-09-21]. Dostupné online. (anglicky)
- ↑ ExcelTown.com. RExcel – Propojení Excelu s jazykem R [online]. [cit. 2018-09-21]. Dostupné online.
Externí odkazy
- Obrázky, zvuky či videa k tématu R na Wikimedia Commons
Média použitá na této stránce
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:
(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.