Za´klady pra´ce s R Arnoˇst Kom´arek 8. ˇr´ıjna 2007
R je volnˇe ˇsiˇriteln´a verze syst´emu S, kter´ y byl vyvinut Johnem Chambersem a kolegy v Bell Laboratories. Komerˇcn´ı a dle m´eho n´azoru v mnoha ohledech horˇs´ı variantou syst´emu S (a to nejen s ohledem na cenu) je program S-plus dod´avan´ y firmou Insightful Corporation. Na tomto m´ıstˇe uvedu nˇekolik z´akladn´ıch informac´ı o Rku, zejm´ena kde ho z´ıskat jak ho nainstalovat a jak prov´est nˇekter´e z´akladn´ı obecn´e operace.
1
Staˇ zen´ı a instalace
Program R lze moˇzno zdarma st´ahnout a d´ale distribuovat (pˇri dodrˇzen´ı podm´ınek GNU GPL licence) z libovoln´eho zrcadla dostupn´eho pˇres http://www.R-project.org. V tomto textu pop´ıˇsi postup pro uˇzivatele operaˇcn´ıho syst´emu Wokna. R je samozˇrejmˇe dostupn´e i pro dalˇs´ı operaˇcn´ı syst´emy jako Linux nebo MacOS. Pˇredpokl´ad´am vˇsak, ˇze uˇzivatel´e ne-Wokenn´ıch operaˇcn´ı syst´em˚ u jsou dostateˇcnˇe zkuˇsen´ı v ovl´ad´an´ı poˇc´ıtaˇce, ˇze si snadno porad´ı sami. Linux uˇzivatel˚ um vˇrele dopoy k´od a R si zkompilovat ruˇcuji nestahovat pˇredkompilovanou verzi R, ale st´ahnout si pˇr´ımo zdrojov´ pomoc´ı asi 3 pˇr´ıkaz˚ u sv´epomoc´ı. Tak tedy postup pro Woken´aˇre: 1. Jdˇete na str´anku http://www.R-project.org; 2. Kliknˇete na odkaz CRAN v Download sekci na lev´e stranˇe str´anky; 3. Zvolte si vhodn´e (ne pˇr´ıliˇs vzd´alen´e zrcadlo), osobnˇe m´am dobr´e zkuˇsenosti se zrcadlem rakousk´ ym (Austria); 4. V sekci Precompiled Binary Distributions kliknˇete na Windows (95 and later); 5. Pro staˇzen´ı z´akladn´ıho R kliknˇete na odkaz base; 6. St´ahnˇete soubor R-2.6.0-win32.exe (ˇc´ıslo 2.6.0 odr´aˇz´ı ˇc´ıslo aktu´aln´ı verze a s ˇcasem se mˇen´ı); 7. Na sv´em poˇc´ıtaˇci kliknˇete na R-2.6.0-win32.exe a postupujte podle instrukc´ı (odbobnˇe jako pˇri instalaci jak´ehokoliv jin´eho programu); 8. Na ploˇse poˇc´ıtaˇce se patrnˇe objev´ı ikona zn´azorˇ nuj´ıc´ı modr´e p´ısmeno R.
1.1
Pˇ r´ıdavn´ e bal´ıky
Do R lze podle potˇreby doinstalovat t´eˇz nˇekter´ y(´e) z asi 500 pˇr´ıdavn´ ych bal´ık˚ u (viz odkaz Contributed packages na CRAN). U poˇc´ıtaˇce s pˇr´ım´ ym (a rozumnˇe rychl´ ym) pˇripojen´ım na Internet lze toto uˇcinit pomoc´ı pˇr´ıkazu install.packages, napˇr. 1
> install.packages("Rcmdr") nainstaluje bal´ık nazvan´ y Rcmdr (a t´eˇz vˇsechny dalˇs´ı bal´ıky, na nichˇz je Rcmdr z´avisl´e). 1. Stisknˇete Enter a mˇeli byste vidˇet modr´e zpr´avy o pr˚ ubˇehu instalace. 2. Pokud se V´am vˇse podaˇrilo, pˇr´ıkaz > library(Rcmdr) by mˇel zp˚ usobit otevˇren´ı jak´ehosi dalˇs´ıho okna.
2
Zaˇ c´ın´ ame, kde naj´ıt pomoc ˇ ci n´ apovˇ edu?
Program R spust´ıte kliknut´ım na jeho ikonu. Na zaˇca´tku kaˇzd´e pr´ace doporuˇcuji nastavit pracovn´ı adres´aˇr tak, aby program vˇedˇel, kde br´at napˇr, poˇzadovan´a data anebo abyste Vy vˇedˇeli kde se budou ukl´adat napˇr. vytvoˇren´a grafy. Pˇredpokl´adejme, ˇze chceme m´ıt pracovn´ı adres´aˇr C:\Moje\Veci. Jako pracovn´ı ho nastav´ıme pomoc´ı > setwd("C:/Moje/Veci") V´ıce o nastaven´ı pracovn´ıho adres´aˇre se doˇctete v odd´ıle 4.4. K tomu, aby se V´am otevˇrelo okno, v nˇemˇz lze v horn´ı polovinˇe editovat pˇr´ıkazy a v doln´ı polovinˇe vidˇet v´ ysledky, mus´ıte si pˇripojit pˇr´ıdavn´ y bal´ık Rcmdr (nejprve ho mus´ıte nainstalovat – viz v´ yˇse). Toto uˇcin´ıte pomoc´ı pˇr´ıkazu > library(Rcmdr) Dˇr´ıve neˇz zaˇcnete, doporuˇcuji se alespoˇ n zbˇeˇznˇe pod´ıvat na dostupn´e pˇr´ıruˇcky (v angliˇctinˇe): kliknˇete na Help v horn´ı ˇca´ sti spuˇstˇen´eho R (ve Woknech) a zvolte si obl´ı ben´ y form´a t (Html help nebo Manuals (in PDF)). Zejm´ena pˇr´ıruˇcka – An Introduction to R by nemˇela uniknout Vaˇs´ı alespoˇ n zbˇeˇzn´e pozornosti. N´apovˇeda jak z´akladn´ıho R tak pˇr´ıdavn´ ych bal´ık˚ u (packages) je (v z´avislosti na snaze autora bal´ıku) obvykle na pomˇernˇe vysok´e u ´ rovni. K pouˇzit´ı HTML n´apovˇe dy staˇc´ı kliknout na Help liˇstu (ve Woknech), zvolit Html help a pot´e kliknout na Packages v sekci Reference. Tato akce V´am pod´a seznam vˇsech nainstalovan´ ych bal´ık˚ u (povˇsimnˇete si, ze mnoh´e bal´ıky jsou naistalov´any standardnˇe se z´akladn´ım R). N´apovˇedu k jak´emukoliv pˇr´ıkazu programu R z´ısk´ate jeho vyhled´an´ım v podsekci pˇr´ısluˇs n´eho bal´ıku. Pˇrehled tˇech nejd˚ uleˇzitˇejˇs´ıch bal´ık˚ u n´asleduje. base z´akladn´ı pˇr´ıkazy programu R (matematick´e operace a funkce, pr´ace s vektory a maticemi, manipulace s daty, . . . ); graphics z´akladn´ı pˇr´ıkazy pro vytv´aˇren´ı obr´azk˚ u a grafick´ ych v´ ystup˚ u; stats funkce k prov´a dˇen´ı z´akladn´ıch statistick´ ych v´ ypoˇct˚ u, test˚ u, . . . Pokud v´ıte jak se pˇr´ıkaz, pro nˇejˇz hled´ate n´apovˇedu jmenuje (napˇr. mean), z´ısk´ate n´apovˇedu pomoc´ı otazn´ıku a n´azvu pˇr´ıkazu z pˇr´ıkazov´e ˇra´ dky R: > ?mean nebo pomoc´ı pˇr´ı kazu help: > help(mean) 2
2.1
Nˇ ekolik z´ akladn´ıch oper´ ator˚ u a pˇ r´ıkaz˚ u
• Oper´ator pˇriˇrazen´ı m´a tvar <- (menˇs´ıtko a pomlka) anebo = (rovn´ıtko). > x <- 10 > x [1] 10 > x = 10 > x [1] 10 • Vektor vytvoˇr´ıme pomoc´ı funkce c (combine). > x <- c(1, 2, 3, 4, 5) > x [1] 1 2 3 4 5 • Vektor maj´ıc´ı tvar aritmetick´e posloupnosti vytvoˇr´ıme pomoc´ı funkce seq (sequence), vektor ve tvaru aritmetick´e posloupnosti s krokem 1 t´eˇz pomoc´ı oper´atoru : (dvojteˇcka). > x <- seq(1, 5, by = 1) > x [1] 1 2 3 4 5 > x <- seq(1, 5, length = 5) > x [1] 1 2 3 4 5 > x <- 1:5 > x [1] 1 2 3 4 5 • Matici vytvoˇr´ıme pomoc´ı funkce matrix. Data do matice se vyplˇ nuj´ı standardnˇe po sloupc´ıch. Chceme-li je vyplˇ novat po ˇra´dc´ıch, mus´ıme nastavit argument byrow funkce matrix na TRUE. > x <- matrix(seq(1, 11, by = 2), nrow = 2, ncol = 3) > x
3
[1,] [2,]
[,1] [,2] [,3] 1 5 9 3 7 11
> x <- matrix(seq(1, 11, by = 2), nrow = 2, ncol = 3, byrow = TRUE) > x
[1,] [2,]
3
[,1] [,2] [,3] 1 3 5 7 9 11
Naˇ cten´ı dat
K praktick´e anal´ yze vlastn´ıch dat je potˇreba tato nˇejak´ ym zp˚ usobem Rku dodat. Program je schopem ˇc´ıst z pevn´eho disku (ˇci jin´eho m´edia) data uloˇzen´a v mnoha r˚ uzn´ ych form´atech. Vzhledem k tomu, ˇze vˇetˇsina program˚ u (SAS, Excel, . . . ) umoˇzn ˇ uje export dat do obyˇcejn´eho ASCII (txt) souboru, probereme zde detailnˇeji naˇc´ıt´an´ı ASCII soubor˚ u ve v´ıˇre, ˇze pomoc´ı exportn´ıho mezikroku bude ˇcten´aˇr schopen naˇc´ıtat soubory uloˇzen´e v t´emˇeˇr jak´emkoliv jin´em form´atu. Pro pˇr´ım´e naˇc´ıt´an´ı dat uloˇzen´ ych v jin´em neˇz ASCII form´atu odkazujeme na R Data Import/Export pˇr´ıruˇcku dostupnou po kliknut´ı na Help liˇstu (zde je mimo jin´e pops´an podrobnˇe import dat z Excelu). Z´akladn´ım pˇr´ıkazem pro ˇcten´ı obd´eln´ıkov´ ych dat je pˇr´ıkaz read.table. Uvedeme nˇekolik pˇr´ıklad˚ u jeho pouˇzit´ı.
3.1
Datov´ y soubor s daty oddˇ elen´ ymi mezerou
Pˇredstavme si, ˇze m´ame n´asleduj´ıc´ı datov´ y soubor. Soubor kamaradi.dat: Tohle je soubor vytvoreny v den vyroci objevu parniho stroje Autor souboru je neznamy a nenese zadnou odpovednost za data v souboru obsazena id pohlavi vyska vaha 1 muz 173 75 2 zena 165 50 3 muz 185 80 4 muz 181 100 5 zena 158 67 Data naˇcteme a pot´e prohl´edneme pomoc´ı: > kamaradi <- read.table("kamaradi.dat", skip = 3, header = TRUE) > kamaradi id pohlavi vyska vaha 1 1 muz 173 75 2 2 zena 165 50 4
3 4 5
3 4 5
muz muz zena
185 181 158
80 100 67
Argument skip zde roven hodnotˇe 3 ud´av´a, ˇze na zaˇca´tku souboru jsou 3 ˇra´dky, kter´e neobsahuj´ı ˇza´dnou datovou informaci. Argument header, zde roven TRUE na druhou stranu ˇr´ık´a, ˇze datov´ y soubor kromˇe vlastn´ıch dat obsahuje t´eˇz informaci o jm´enech jednotliv´ ych promˇenn´ ych na prvn´ım ˇra´dku (po pˇreskoˇcen´ı tˇr´ı ˇra´dk˚ u s koment´aˇrem).
3.2
Datov´ y soubor s jin´ ym oddˇ elovaˇ cem neˇ z mezerou
Pˇredstavme si nyn´ı, ˇze v´ yˇse uveden´ y soubor m´a ponˇekud jin´ y tvar (datov´e poloˇzky jsou oddˇeleny stˇredn´ıky nam´ısto mezer). Soubor kamaradi2.dat: Tohle je soubor vytvoreny v den vyroci objevu parniho stroje Autor souboru je neznamy a nenese zadnou odpovednost za data v souboru obsazena id; pohlavi; vyska; vaha 1; muz; 173; 75 2; zena; 165; 50 3; muz; 185; 80 4; muz; 181; 100 5; zena; 158; 67 Soubor naˇcteme a data pot´e prohl´edneme pomoc´ı: > kamaradi2 <- read.table("kamaradi2.dat", skip = 3, header = TRUE, + sep = ";") > kamaradi2
1 2 3 4 5
id 1 2 3 4 5
pohlavi vyska vaha muz 173 75 zena 165 50 muz 185 80 muz 181 100 zena 158 67
Fakt, ˇze data jsou oddˇelena stˇredn´ıky jsme sdˇelili funkci read.table pomoc´ı argumentu sep. Jsou-li vaˇse data oddˇelena jin´ ym znakem (znaky), staˇc´ı zmˇenit hodnotu tohoto argumentu.
3.3
Datov´ y soubor bez jmen promˇ enn´ ych
V nˇekter´ ych situac´ıch nen´ı informace o n´azvech jednotliv´ ych promˇenn´ ych souˇca´st´ı datov´eho souboru a mus´ıme si tedy jednotliv´e promˇenn´e pojmenovat sami jako v n´asleduj´ıc´ım pˇr´ıpadˇe. Soubor kamaradi3.dat:
5
Tohle je soubor vytvoreny v den vyroci objevu parniho stroje Autor souboru je neznamy a nenese zadnou odpovednost za data v souboru obsazena 1: muz: 173: 75 2: zena: 165: 50 3: muz: 185: 80 4: muz: 181: 100 5: zena: 158: 67 Soubor naˇcteme a data pot´e prohl´edneme pomoc´ı: > kamaradi3 <- read.table("kamaradi3.dat", skip = 3, header = FALSE, + sep = ":") > colnames(kamaradi3) <- c("id", "pohlavi", "vyska", "vaha") > kamaradi3
1 2 3 4 5
id 1 2 3 4 5
pohlavi vyska vaha muz 173 75 zena 165 50 muz 185 80 muz 181 100 zena 158 67
Argument header je nyn´ı roven FALSE, pomoc´ı funkce colnames pojmenujeme jednotliv´e sloupce dat. Povˇsimnˇete si t´eˇz, ˇze jednotliv´a data byla nyn´ı v datov´em souboru oddˇelena dvojteˇckou.
3.4
Data s chybˇ ej´ıc´ımi pozorov´ an´ımi
V re´aln´em ˇzivotˇe se n´am ne vˇzdy podaˇr´ı z´ıskat vˇsechna data, kter´a jsme si pˇredsevzali z´ıskat. Datov´ y soubor pot´e obsahuje chybˇej´ıc´ı data, obvykle nˇejak oznaˇcen´a. V n´asleduj´ıc´ım souboru se nepodaˇrilo z´ıskat v´ yˇsku jedn´e a hmotnost dvou osob. Soubor kamaradi4.dat: Tohle je soubor vytvoreny v den vyroci objevu parniho stroje Autor souboru je neznamy a nenese zadnou odpovednost za data v souboru obsazena id pohlavi vyska vaha 1 muz 173 75 2 zena 165 xx 3 muz xx 80 4 muz 181 xx 5 zena 158 67 Data naˇcteme a pot´e prohl´edneme pomoc´ı: > kamaradi4 <- read.table("kamaradi4.dat", skip = 3, header = TRUE, + na.strings = "xx") 6
> kamaradi4
1 2 3 4 5
id pohlavi vyska vaha 1 muz 173 75 2 zena 165 NA 3 muz NA 80 4 muz 181 NA 5 zena 158 67
Zp˚ usob, jak´ ym jsou chybˇej´ıc´ı pozorov´an´ı k´odov´ana v datov´em souboru jsme funkci read.table sdˇelili pomoc´ı jej´ıho argumentu na.strings (zde kombinace dvou p´ısmen ,x‘). Povˇsimnˇeme si, ˇze R k´oduje chybˇej´ıc´ı pozorovan´ı pomoc´ı kombinace p´ısmen ,NA‘ (not available).
3.5
Data s chybˇ ej´ıc´ımi pozorov´ an´ımi podruh´ e
Pˇri exportu dat z jin´ ych syst´em˚ u je ˇcasto (t´emˇeˇr) nemoˇzn´e reprezentovat chybˇej´ıc´ı pozorov´an´ı jinak neˇz mezerou. V takov´em pˇr´ıpadˇe mus´ıme jednotliv´e poloˇzky dat oddˇelit nˇeˇc´ım jin´ ym neˇz standardn´ı mezerou (napˇr. stˇredn´ıkem) a pot´e je snadno naˇcteme jako v n´asleduj´ıc´ım pˇr´ıpadˇe. Soubor kamaradi5.dat: Tohle je soubor vytvoreny v den vyroci objevu parniho stroje Autor souboru je neznamy a nenese zadnou odpovednost za data v souboru obsazena id; pohlavi; vyska; vaha 1; muz; 173; 75 2; zena; 165; 3; muz; ; 80 4; muz; 181; 5; zena; 158; 67 Soubor naˇcteme a data pot´e prohl´edneme pomoc´ı: > kamaradi5 <- read.table("kamaradi5.dat", skip = 3, header = TRUE, + sep = ";", na.strings = "") > kamaradi5
1 2 3 4 5
id 1 2 3 4 5
3.6
pohlavi vyska vaha muz 173 75 zena 165 NA muz NA 80 muz 181 NA zena 158 67
Datov´ y soubor se sloupci pevn´ eˇ s´ıˇ rky
V praxi je moˇzn´e se setkat t´eˇz se soubory, kter´a maj´ı data uloˇzena ve sloupc´ıch pevn´e (zn´am´e) ˇs´ıˇrky (fixed width formatted). V takov´emto form´atu jsou ˇcasto uloˇzena data obsahuj´ıc´ı vˇetˇs´ı mnoˇzstv´ı 7
textov´e informace. Soubory tohoto typu naˇc´ıt´ame pomoc´ı funkce read.fwf z bal´ıku utils (tento bal´ık nen´ı nutn´e explicitnˇe pˇripojovat k Ru, nebot’ je pˇripojen automaticky). Soubor kamaradi6.dat: Tohle je soubor vytvoreny v den vyroci objevu parniho stroje Autor souboru je neznamy a nenese zadnou odpovednost za data v souboru obsazena 1 muz 173 75 2 zena 165 * 3 muz * 80 4 muz 181 * 5 zena 158 67 Soubor naˇcteme a data pot´e prohl´edneme pomoc´ı: > kamaradi6 <- read.fwf("kamaradi6.dat", skip = 3, header = FALSE, + widths = c(3, 8, 6, 5), sep = "", na.strings = "*") > colnames(kamaradi6) <- c("id", "pohlavi", "vyska", "vaha") > kamaradi6
1 2 3 4 5
id pohlavi vyska vaha 1 muz 173 75 2 zena 165 NA 3 muz NA 80 4 muz 181 NA 5 zena 158 67
ˇ ıˇrka jednotliv´ S´ ych sloupc˚ u byla ud´ana pomoc´ı argumentu widths funkce read.fwf.
3.7
Naˇ c´ıt´ an´ı nepravideln´ ych ˇ ci rozs´ ahl´ ych dat
Vzhledem k tomu, ˇze funkce read.table pˇri naˇc´ıt´an´ı dat pˇrev´ad´ı nejprve cel´ y soubor do jednoho dlouh´eho ˇretˇezce a pot´e tento ˇretˇezec kouskuje na jednotliv´a data, m˚ uˇze se st´at, ˇze velk´e datov´e soubory (nˇekolik des´ıtek tis´ıc pozorov´an´ı) naraz´ı pˇri naˇc´ıt´an´ı na nedostatek operaˇcn´ı pamˇeti vaˇseho poˇc´ıtaˇce. V takov´em pˇr´ıpadˇe je lepˇs´ı pouˇz´ıt funkci scan pro naˇcten´ı dat. Tato funkce ˇcte data sekvenˇcnˇe tak jak jsou uloˇzena v souboru a je tedy vhodn´a t´eˇz k naˇc´ıt´an´ı soubor˚ u s nepravidelnˇe uspoˇra´dan´ ymi, t.j. neobd´eln´ıkov´ ymi daty. Pro ilustraci zde uvedeme zp˚ usob naˇcten´ı souboru kamaradi5.dat pomoc´ı scan. Pro pokroˇcilejˇs´ı pouˇzit´ı t´eto funkce odkazuji na jej´ı n´apovˇedu. > kamaradi5a <- as.data.frame(scan("kamaradi5.dat", skip = 4, what = list(numeric(0), + character(0), numeric(0), numeric(0)), sep = ";", na.strings = "")) > colnames(kamaradi5a) <- scan("kamaradi5.dat", skip = 3, nlines = 1, + what = character(0), sep = ";") > kamaradi5a
1
id 1
pohlavi muz
vyska 173
vaha 75 8
2 3 4 5
2 3 4 5
zena muz muz zena
165 NA 181 158
NA 80 NA 67
Povˇsimnˇete si, ˇze funkci scan mus´ıme sdˇelit pomoc´ı argumentu what jak´ y typ dat budeme naˇc´ıtat. D´ale si povˇsimnˇete jak jsme funkci scan zkombinovali s funkc´ı as.data.frame a pot´e pomoc´ı dalˇs´ıho vol´an´ı funkce scan naˇcetli jm´ena promˇenn´ ych.
4
Ukl´ ad´ an´ı obr´ azk˚ u do souboru
Abychom vytvoˇren´e obr´azky mohli zahrnout do vlastn´ıch dokument˚ u (zpr´av o anal´ yze apod.) mus´ıme b´ yt schopni obr´azky uloˇzit v souboru vhodn´eho form´atu. Nejd˚ uleˇzitˇejˇs´ımi form´aty, kter´e Rko nab´ız´ı jsou • postscript (.ps) • portable document format (.pdf) • bitov´e mapy typu jpg a png
4.1
Postscript
Obr´azek ve form´atu .ps uloˇz´ıme pomoc´ı pˇr´ıkazu postcript. Nejd˚ uleˇzitˇejˇs´ımi argumenty tohoto pˇr´ıkazu jsou file jm´eno souboru, do kter´eho chceme obr´azek uloˇzit; width, height ˇs´ıˇrka a v´ yˇska obr´azku v palc´ıch (1inch = 2,54cm); horizontal TRUE ˇci FALSE ud´avaj´ıc´ı jakou orientaci pro obr´azek chceme. Leˇzat´a orientace (landscape), pokud horizontal=TRUE, stojat´a orientace (portrait), pokud horizontal=FALSE; Napˇr´ıklad hypotetick´ y krabicov´ y graf uloˇz´ıme do souboru nazvan´em mujboxplot.ps n´asleduj´ıc´ım ysledek m´a b´ yt uloˇzen). zp˚ usobem (pˇr´ıkaz dev.off() sdˇeluje Rku, ˇze uˇz jsme skonˇcili s kreslen´ım a v´ > > > >
postscript(file = "mujboxplot.ps", width = 6.5, height = 5, horizontal = FALSE) par(mfrow = c(1, 1), bty = "n") boxplot(spotr.mesto ~ druh, data = Auta93, main = "Spotreba ve meste") dev.off()
4.2
Portable document format
Obr´azek ve form´atu .pdf uloˇz´ıme pomoc´ı pˇr´ıkazu pdf. Nejd˚ uleˇzitˇejˇs´ımi argumenty tohoto pˇr´ıkazu jsou file jm´eno souboru, do kter´eho chceme obr´azek uloˇzit; width, height ˇs´ıˇrka a v´ yˇska obr´azku v palc´ıch (1inch = 2,54cm). Hypotetick´ y krabicov´ y graf uloˇz´ıme do souboru nazvan´em mujboxplot.pdf n´asleduj´ıc´ım zp˚ usobem. 9
> > > >
pdf(file = "mujboxplot.pdf", width = 6.5, height = 5) par(mfrow = c(1, 1), bty = "n") boxplot(spotr.mesto ~ druh, data = Auta93, main = "Spotreba ve meste") dev.off()
4.3
Bitov´ e mapy
Soubory typu .jpg, respektive .png vytvoˇr´ıme pˇr´ıkazy jpeg, respektive png. Jejich nejd˚ uleˇzitˇejˇs´ımi argumenty jsou filename jm´eno souboru, do kter´eho chceme obr´azek uloˇzit; width, height ˇs´ıˇrka a v´ yˇska obr´azku v pixelech; quality (pouze pro jpeg) ˇc´ıslo mezi 0 a 100 ud´avaj´ıc´ı kvalitu bitov´e mapy. Niˇzˇs´ı hodnoty vedou k vˇetˇs´ı kompresi a horˇs´ı kvalitˇe. Hypotetick´ y krabicov´ y graf uloˇz´ıme do souboru nazvan´eho mujboxplot.jpg, resp. mujboxplot.png n´asleduj´ıc´ımi zp˚ usoby. > > > >
jpeg(filename = "mujboxplot.jpg", width = 1000, height = 700, quality = 75) par(mfrow = c(1, 1), bty = "n") boxplot(spotr.mesto ~ druh, data = Auta93, main = "Spotreba ve meste") dev.off()
> > > >
png(filename = "mujboxplot.png", width = 1000, height = 700) par(mfrow = c(1, 1), bty = "n") boxplot(spotr.mesto ~ druh, data = Auta93, main = "Spotreba ve meste") dev.off()
4.4
Kde najdu uloˇ zen´ y soubor?
Soubor naleznete v pracovn´ım adres´aˇri. Ale kter´ y to je? Na tuto ot´azku v´am odpov´ı funkce getwd (get working directory): > getwd() [1] "/home/komari/teach/mff_2007/Rko" Pokud se v´am pracovn´ı adres´aˇr nel´ıb´ı, m˚ uˇzete ho zmˇenit pˇr´ıkazem setwd (set working directory): > puvodni.dir <- getwd() > setwd("/home/komari/teach/") Byl adres´aˇr zmˇenˇen? > getwd() [1] "/home/komari/teach" 10
Ano, byl. Ale j´a chci zpˇet m˚ uj p˚ uvodn´ı adres´aˇr: > setwd(puvodni.dir) Pozn´amka pro uˇzivatele Woken. Ve jm´enech adres´aˇr˚ u pouˇz´ıv´ame bˇeˇzn´a a nikoliv zpˇetn´a lom´ıtka, t.j. adres´aˇr C:\komari\work nastav´ıme jako pracovn´ı pˇr´ıkazem: > setwd("C:/komari/work")
5 5.1
Souhrnn´ y pˇ rehled nejd˚ uleˇ zitˇ ejˇ s´ıch pˇ r´ıkaz˚ u Z´ akladn´ı elementy Pˇ r´ıkazy
ls() nebo objects() rm(object) search()
vypiˇs seznam objekt˚ u definovan´ ych a dostupn´ ych na pracovn´ı ploˇse vymaˇz object z pracovn´ı plochy vypiˇs co vˇsechno je prohled´av´ano a v jak´em poˇrad´ı, kdyˇz se hled´a nˇejak´ y objekt
Jm´ ena promˇ enn´ ych Kombinace p´ısmen, ˇc´ıslic a teˇcek. Nesm´ı zaˇc´ınat ˇc´ıslic´ı. Nedoporuˇcuje se zaˇc´ınat jm´eno promˇenn´e teˇckou. Rozliˇsuj´ı se velk´a a mal´a p´ısmena, tj. objekt pojmenovan´ y krabicka je nˇeco jin´eho neˇz objekt pojmenovan´ y Krabicka. Pˇ riˇ razovac´ı pˇ r´ıkazy < − nebo = −> << −
5.2
pˇriˇrad’ hodnotu promˇenn´e pˇriˇrazen´ı doprava“ ” glob´aln´ı pˇriˇrazen´ı (ve funkc´ıch)
Oper´ atory Aritmetick´ e oper´ atory + − ∗ / ∧ %/% %%
sˇc´ıt´an´ı odˇc´ıt´an´ı n´asoben´ı dˇelen´ı umocˇ nov´an´ı celoˇc´ıseln´e dˇelen´ı (div) zbytek po celoˇc´ıseln´em dˇelen´ı (mod) 11
Logick´ e oper´ atory a oper´ atory vztahu V´ ysledkem tˇechto oper´ator˚ u je vˇzdy logick´a hodnota TRUE anebo FALSE. == != < > <= >= is.na(x) & | !
5.3
je rovno? nen´ı rovno? je menˇs´ı neˇz? je vˇetˇs´ı neˇz? je menˇs´ı neˇz nebo rovno? je vˇetˇs´ı neˇz nebo rovno? je x chybˇej´ıc´ı hodnota? ˇ ˇ (AND) logick´e A SOUCASN E logick´e NEBO (OR) logick´a negace (NOT)
Vektory a datov´ e typy Generov´ an´ı vektor˚ u s nˇ ejakou strukturou
numeric(25) character(25) logical(25) seq(-4, 4, 0.1) 1:10 c(5, 7, 9, 13, 1:5) rep(1, 10) gl(3, 2, 12)
vektor o 25 nul´ach vektor s 25 pr´azdn´ ymi znaky, tj. "" logick´ y vektor s 25 elementy rovn´ ymi FALSE vektor aritmetick´e posloupnosti −4, −3,9, −3,8, . . . , 3,9, 4 vektor aritmetick´e posloupnosti 1, 2, . . . , 10, to sam´e jako pˇr´ıkaz seq(1, 10, 1) vytvoˇr vektor spojen´ım sloˇzek uvnitˇr c (concatenation), zde vektor 5, 7, 9, 13, 1, 2, 3, 4, 5 vektor, kde se 1 opakuje 10× faktorov´ y vektor o 3 u ´ rovn´ıch, opakuj kaˇzdou u ´ roveˇ n v bloc´ıch o velikosti 2, a to aˇz do celkov´e d´elky vektoru 12, zde tedy 1, 1, 2, 2, 3, 3, 1, 1, 2, 2, 3, 3
Pˇ retypov´ an´ı vektor˚ u as.numeric(x) as.character(x) as.logical(x) factor(x)
pˇretypuj x na numerick´ y vektor pˇretypuj x na znakov´ y vektor pˇretypuj x na logick´ y vektor (obsahuj´ıc´ı pouze TRUE a FALSE) vytvoˇr faktor (kategori´aln´ı veliˇcinu) z x
12
5.4
Datov´ e soubory (data frames)
data.frame(height=c(165, 185), weight=c(90, 65)) data.frame(height, weight) dfr$var attach(dfr) detach(dfr)
5.5
vytvoˇr data frame se dvˇema pojmenovan´ ymi veliˇcinami uloˇz dˇr´ıve vytvoˇren´e vektory jako dva sloupce v data framu vyber promˇennou (sloupec) var z data framu dfr poloˇz data frame dfr do vyhled´avac´ı cesty, k jednotliv´ ym promˇenn´ ym lze potom pˇristupovat i bez $ odstraˇ n data frame z vyhled´avac´ı cesty
Numerick´ e funkce Matematick´ e
log(x) log10(x) exp(x) sin(x) cos(x) tan(x) asin(x) acos(x) atan(x) mix(x) min(x1, x2, ...) max(x) max(x1, x2, ...) range(x) pmin(x1, x2, ...) pmax(x1, x2, ...) length(x) sum(complete.cases(x))
pˇrirozen´ y logaritmus x dekadick´ y logaritmus x exponenci´aln´ı funkce ex sinus x kosinus x tangens x arcus-sinus x arcus-kosinus x arcus-tangens x minimum z vektoru x minimum z nˇekolika vektor˚ u, v´ ysledkem je jedno ˇc´ıslo maximum z vektoru x maximum z nˇekolika vektor˚ u, v´ ysledkem je jedno ˇc´ıslo to sam´e jako c(min(x), max(x)) paraleln´ı (po sloˇzk´ach) minimum z nˇekolika stejnˇe dlouh´ ych vektor˚ u paraleln´ı (po sloˇzk´ach) maximum z nˇekolika stejnˇe dlouh´ ych vektor˚ u poˇcet sloˇzek vektoru poˇcet nechybˇej´ıc´ıch sloˇzek ve vektoru
Statistick´ e mean(x) sd(x) var(x) median(x) quantile(x, p) cor(x, y)
aritmetick´ y pr˚ umˇer smˇerodatn´a odchylka rozptyl medi´an kvantily korelace 13
5.6
Indexace/vyb´ır´ an´ı
x[1] x[1:5] x[c(2,3,5,7,11)] x[y <= 30] x[sex=="male"] i <- c(2,3,5,7,11); x[i] l <- (y<=30); x[l]
prvn´ı element podvektor obsahuj´ıc´ı prvn´ıch pˇet element˚ u podvektor obsahuj´ıc´ı 2., 3., 5., 7. a 11. element v´ ybˇer podvektoru pomoc´ı logick´eho v´ yrazu v´ ybˇer podvektoru pomoc´ı faktorov´e promˇenn´e v´ ybˇer podvektoru pomoc´ı ˇc´ıseln´e promˇenn´e v´ ybˇer podvektoru pomoc´ı logick´e promˇenn´e
Matice a datov´ e soubory m[4,] m[,3] dfr[dfr$promenna<=30] subset(dfr, subset=(promenna<=30))
5.7
ˇctvrt´ y ˇra´dek tˇret´ı sloupec ˇca´steˇcn´ y datov´ y soubor to sam´e jako pˇredch´azej´ıc´ı pˇr´ıkaz
Pravdˇ epodobnostn´ı rozdˇ elen´ı Norm´ aln´ı rozdˇ elen´ı dnorm(x) pnorm(x) qnorn(p) rnorm(n)
hustota N (0, 1) distribuˇcn´ı funkce N (0, 1), P(X ≤ x) p-kvantil N (0, 1), x: P(X ≤ x) = p n pseudon´ahodn´ ych standardnˇe norm´alnˇe rozdˇelen´ ych hodnot
Diskr´ etn´ı rozdˇ elen´ı – pravdˇ epodobnostn´ı funkce dbinom(x, n, p) dgeom(x, prob) dnbinom(x, size, prob) dhyper(x, m, n, k)
dpois(x, lambda) dmultinom(x, size, prob) dsignrank(x, n) dwilcox(x, m, n)
binomick´e rozdˇelen´ı s n pokusy a pravdˇepodobnost´ı u ´ spˇechu p geometrick´e rozdˇelen´ı s pravdˇepodobnost´ı u ´ spˇechu p negativnˇe binomick´e rozdˇelen´ı s pravdˇepodobnost´ı u ´ spˇechu p a poˇctem size u ´ spˇech˚ u na kter´e ˇcek´ame hypergeometrick´e rozdˇelen´ı (v´ ybˇer bez vracen´ı), kde m je poˇcet b´ıl´ ych koul´ı v urnˇe, n poˇcet ˇcern´ ych koul´ı v urnˇe a k poˇcet koul´ı taˇzen´ ych z urny Poissonovo rozdˇelen´ı se stˇredn´ı hodnotou lambda multinomick´e rozdˇelen´ı rozdˇelen´ı Wilcoxonovy jednov´ ybˇerov´e statistiky ve v´ ybˇeru o rozsahu n rozdˇelen´ı Wilcoxonovy dvouv´ ybˇerov´e statistiky pro v´ ybˇery o rozsahu m a n 14
Spojit´ a rozdˇ elen´ı s oborem hodnot R – hustoty
norm´aln´ı rozdˇelen´ı se stˇredn´ı hodnotou mean a smˇerodatnou odchylkou sd Studentovo t rozdˇelen´ı s df stupni volnosti Cauchyho rozdˇelen´ı (zobecnˇen´ı t 1 rozdˇelen´ı) logistick´e rozdˇelen´ı
dnorm(x, mean, sd) dt(x, df) dcauchy(x, location, scale) dlogis(x, location, scale)
Spojit´ a rozdˇ elen´ı s oborem hodnot R + – hustoty dexp(x, rate) df(x, n1, n2) dchisq(x, df) dlnorm(x, mean, sd) dweibull(x, shape, scale) dgamma(x, shape, rate)
exponenci´aln´ı rozdˇelen´ı se stˇredn´ı hodnotou 1/rate Fisherovo-Snedeckorovo F rozdˇelen´ı se stupni volnosti n1 a n2 χ2 rozdˇelen´ı s df stupni volnosti log-norm´aln´ı rozdˇelen´ı, tj. log(X) ∼ N (mean, sd 2 ) Weibullovo rozdˇelen´ı gamma rozdˇelen´ı se stˇredn´ı hodnotou shape/rate
Spojit´ a rozdˇ elen´ı s oborem hodnot rovn´ ym intervalu v R – hustoty dunif(x, min, max) dbeta(x, a, b)
rovnomˇern´e rozdˇelen´ı na intervalu (min, max) beta rozdˇelen´ı na intervalu (a, b)
Stejn´e znaˇcen´ı jako u norm´aln´ıho rozdˇelen´ı, tj. p-q-r, plat´ı pro hustoty, kvantilov´e funkce a funkce generuj´ıc´ı pseudon´ahodn´a ˇc´ısla.
5.8
Standardn´ı statistick´ e metody Kvantitativn´ı (spojit´ a) odezva
t.test pairwise.t.test cor.test var.test lm(y ∼ x) lm(y ∼ f) lm(y ∼ f1 + f2) lm(y ∼ f + x) lm(y ∼ x1 + x2 + x3) bartlett.test
jedno a dvouv´ ybˇerov´ y t test p´arov´ y t test, resp. mnohon´asobn´e porovn´av´an´ı test o korelaˇcn´ım koeficientu pro norm´alnˇe rozdˇelen´a data porovn´an´ı dvou rozptyl˚ u pro norm´alnˇe rozdˇelen´a data (F test) jednoduch´a regrese x na y je-li f faktor, jednoduch´a anal´ yza rozptylu (one-way ANOVA) jsou-li f1 a f2 faktory, anal´ yza rozptylu se 2 faktory (two-way ANOVA) je-li f faktor, anal´ yza kovariance (ANCOVA) v´ıcerozmˇern´a regrese Bartlett˚ uv test na porovn´an´ı k rozptyl˚ u
15
Kvantitativn´ı (spojit´ a) odezva – neparametrick´ e metody wilcox.test kruskal.test friedman.test cor.test(method = "kendall") cor.test(method = "spearman")
jedno a dvouv´ ybˇerov´ y Wilcoxon˚ uv test Kruskal˚ uv-Wallis˚ uv test (neparametrick´a jednoduch´a ANOVA) Friedmanova neparametrick´a ANOVA s dvˇema faktory test o nulovosti Kendallova τ test o nulovosti Spearmanova ρ
Diskr´ etn´ı odezva binom.test prop.test prop.trend.test fisher.test chisq.test glm(y ∼ x1 + x2 + x3, binomial) glm(count ∼ f1 + f2 + f3, poisson)
binomick´ y test (vˇcetnˇe znam´enkov´eho testu) test porovn´avaj´ıc´ı pravdˇepodobnosti u ´ spˇechu (proportions) ve dvou v´ ybˇerech test pro trend v pravdˇepodobnostech u ´ spˇechu Fisher˚ uv exaktn´ı faktori´alov´ y test v mal´ ych kontingenˇcn´ıch tabulk´ach χ2 test nez´avislosti v kontingenˇcn´ı tabulce logistick´a regrese poissonovsk´a regrese (log-line´arn´ı model)
16