Przewodnik po pakiecie R

180
Przemyslaw Biecek Przewodnik po pakiecie Oficyna Wydawnicza GiS

Transcript of Przewodnik po pakiecie R

  • Przemysaw Biecek

    Przewodnik po pakiecie

    Oficyna Wydawnicza GiS

  • Wnioski, skargi i zaalenia naley kierowa na adresdr hab. in. Przemysaw BiecekInterdyscyplinarne CentrumModelowania Matematycznego i KomputerowegoUniwersytet Warszawskie-mail: [email protected] www: http://www.biecek.pl

    Redakcja i korektaKarolina Biecek, Krzysztof Banas (rozdziay 1 i 2), Krzysztof Trajkowski (rozdzia 3)Projekt okadki:Jakub Rakusa-SuszczewskiSkad komputerowy ksiki w systemie LATEX:Przemysaw Biecek

    Przygotowaem t ksik, aby przedstawimoliwoci programuR, lozo pracy z tym pro-gramem, pokaza dobre praktyki dotyczce codziennej pracy z danymi w R. Licz, e ksikata przyda si tym wszystkim, ktrzy w pracy lub w szkole zajmuj si analiz danych. Ksi-ka moe by wykorzystana, jako pomoc w nauce programu R lub jako atlas funkcjonalnocii moliwoci tego programu. W latach 2010 2013 uywaem jej z powodzeniem jako gw-ny podrcznik do przedmiotu Programowanie w R. Mam nadzieje, e pomoe ona odkryprzyjemno w pracy z danymi i programem R.Pod adresem http://www.biecek.pl/R/ czytelnik znajdzie dodatkowe informacje, roz-wizania zada umieszczonych w tej ksice, oraz odnoniki do innych materiaw poma-gajcych w nauce programu R.

    Copyright 2008, 2011, 2014 by Przemysaw Biecek

    Wszelkie prawa zastrzeone. adna cz niniejszej publikacji, zarwno w caoci, jak i wefragmentach, nie moe by reprodukowana w sposb elektroniczny, fotogra czny i innybez pisemnej zgody posiadaczy praw autorskich.

    Wydanie trzecie rozszerzone, Wrocaw 2014ISBN: 978-83-62780-22-8O cynaWydawnicza GiS, s.c., http://www.gis.wroc.plDruk i oprawa: I-BiS Usugi KomputeroweWydawnictwo s.c.

  • Spis treci

    Spis treci v

    Zanim zaczniemy t przygod ix

    1 agodne wprowadzenie do R 11.1 Jak korzysta z tej ksiki? . . . . . . . . . . . . . . . . . . . . . . 11.2 Sw kilka o projekcie R . . . . . . . . . . . . . . . . . . . . . . . 21.3 Instalacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4 RStudio, uniwersalny edytoR . . . . . . . . . . . . . . . . . . . . 71.5 Startujemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.5.1 Pierwsze uruchomienie . . . . . . . . . . . . . . . . . . . 91.5.2 Gdzie szuka pomocy? . . . . . . . . . . . . . . . . . . . 101.5.3 kalkuRator . . . . . . . . . . . . . . . . . . . . . . . . . . 121.5.4 Kilka przykadowych sesji w programie R . . . . . . . . . 151.5.5 Podstawy skadni jzyka R . . . . . . . . . . . . . . . . . 201.5.6 Wywietlanie i formatowanie obiektw . . . . . . . . . . . 34

    1.6 Przyspieszamy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371.6.1 Instrukcje warunkowe i ptle . . . . . . . . . . . . . . . . 371.6.2 Funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . 431.6.3 Leniwa ewaluacja . . . . . . . . . . . . . . . . . . . . . . 521.6.4 Zarzdzanie obiektami w przestrzeni nazw . . . . . . . . . 541.6.5 Wprowadzenie do gra ki . . . . . . . . . . . . . . . . . . 571.6.6 Wprowadzenie do operacji na plikach i katalogach . . . . 59

    1.7 Zadania do czci agodne wprowadzenie... . . . . . . . . . . . 63

    2 pazuRrry 672.1 Typy zmiennych i operacje na nich . . . . . . . . . . . . . . . . . 67

    2.1.1 Typ czynnikowy/wyliczeniowy . . . . . . . . . . . . . . . 672.1.2 Typ znakowy . . . . . . . . . . . . . . . . . . . . . . . . . 702.1.3 Wektory . . . . . . . . . . . . . . . . . . . . . . . . . . . 712.1.4 Listy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752.1.5 Ramki danych . . . . . . . . . . . . . . . . . . . . . . . . 752.1.6 Macierze . . . . . . . . . . . . . . . . . . . . . . . . . . . 782.1.7 Obiekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862.1.8 Klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882.1.9 Formuy . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

    v

  • vi Spis treci

    2.2 Przetwarzanie potokowe . . . . . . . . . . . . . . . . . . . . . . . 932.2.1 Pakiety plyr i reshape2 . . . . . . . . . . . . . . . . . . . 942.2.2 Rodzina funkcji *apply . . . . . . . . . . . . . . . . . . . 98

    2.3 Wybrane funkcje matematyczne . . . . . . . . . . . . . . . . . . . 1012.3.1 Wielomiany . . . . . . . . . . . . . . . . . . . . . . . . . 1012.3.2 Bazy wielomianw ortogonalnych . . . . . . . . . . . . . 1022.3.3 Operacje na zbiorach . . . . . . . . . . . . . . . . . . . . 1042.3.4 Szukanie maksimum/minimum/zer funkcji . . . . . . . . 1042.3.5 Rachunek rniczkowocakowy . . . . . . . . . . . . . . 105

    2.4 Zapisywanie i odczytywanie danych . . . . . . . . . . . . . . . . . 1072.4.1 Zapisywanie i odczytywanie danych z plikw . . . . . . . 1072.4.2 Zapisywanie i odczytywanie danych z baz danych . . . . . 1172.4.3 Inne sposoby odczytywania i zapisywania danych . . . . . 1192.4.4 Zapisywanie gra ki do pliku . . . . . . . . . . . . . . . . 121

    2.5 Tryb wsadowy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1232.6 Powtarzalne badania, automatyzowane raporty a programowanie

    objaniajce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1242.6.1 Pakiet knitr a raporty w jzyku markdown / HTML . . . 1242.6.2 Pakiet slidify a prezentacje w HTML5 . . . . . . . . . . 1282.6.3 Pakiet Sweave a raporty w jzyku LATEX . . . . . . . . . . . 130

    2.7 Budowa aplikacji www z pakietem shiny . . . . . . . . . . . . . . 1362.8 Budowanie wasnych pakietw . . . . . . . . . . . . . . . . . . . 141

    2.8.1 Niezbdne oprogramowanie . . . . . . . . . . . . . . . . 1412.8.2 Przygotowanie pakietu . . . . . . . . . . . . . . . . . . . 1432.8.3 Wery kacja, budowanie i instalacja pakietu . . . . . . . . 148

    2.9 Debugger i pro ler . . . . . . . . . . . . . . . . . . . . . . . . . . 1512.9.1 Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . 1512.9.2 Pro ler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572.9.3 Jak zwikszy wydajno programw w R . . . . . . . . . 1602.9.4 Przydatne funkcje systemowe . . . . . . . . . . . . . . . . 165

    2.10 Zadania do czci pazuRrry . . . . . . . . . . . . . . . . . . . . 166

    3 Wybrane procedury statystyczne 1693.1 Statystyki opisowe . . . . . . . . . . . . . . . . . . . . . . . . . . 170

    3.1.1 Podstawowe liczbowe statystyki opisowe . . . . . . . . . . 1703.1.2 Podstawowe gra czne statystyki opisowe . . . . . . . . . . 174

    3.2 Generatory liczb losowych . . . . . . . . . . . . . . . . . . . . . . 1823.2.1 Wprowadzenie do generatorw liczb pseudolosowych . . 1843.2.2 Popularne rozkady zmiennych losowych . . . . . . . . . 1863.2.3 Wybrane metody generowania zmiennych losowych . . . 1923.2.4 Estymacja parametrw rozkadu . . . . . . . . . . . . . . 202

    3.3 Wstpne przetwarzanie danych . . . . . . . . . . . . . . . . . . . 2033.3.1 Brakujce obserwacje . . . . . . . . . . . . . . . . . . . . 2033.3.2 Normalizacja, skalowanie i transformacje nieliniowe . . . 206

    3.4 Analiza wariancji, regresja liniowa i logistyczna . . . . . . . . . . 2103.4.1 Wprowadzenie do analizy wariancji . . . . . . . . . . . . 212

  • Spis treci vii

    3.4.2 Analiza jednoczynnikowa . . . . . . . . . . . . . . . . . . 2133.4.3 Analiza wieloczynnikowa . . . . . . . . . . . . . . . . . . 2213.4.4 Regresja . . . . . . . . . . . . . . . . . . . . . . . . . . . 2253.4.5 Wprowadzenie do regresji logistycznej . . . . . . . . . . . 240

    3.5 Testowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2563.5.1 Testowanie zgodnoci . . . . . . . . . . . . . . . . . . . . 2573.5.2 Testowanie hipotezy o rwnoci parametrw pooenia . . 2643.5.3 Testowanie hipotezy o rwnoci parametrw skali . . . . . 2673.5.4 Testowanie hipotez dotyczcych wskanika struktury . . . 2703.5.5 Testy istotnoci zalenoci pomidzy dwoma zmiennymi . 2723.5.6 Testowanie zbioru hipotez . . . . . . . . . . . . . . . . . 2803.5.7 Symulacyjne i permutacyjne wyznaczanie rozkadu staty-

    styki testowej . . . . . . . . . . . . . . . . . . . . . . . . . 2833.6 Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

    3.6.1 Ocena rozkadu estymatora oraz wyznaczanie przedziauufnoci dla parametru . . . . . . . . . . . . . . . . . . . . 287

    3.6.2 Testy bootstrapowe . . . . . . . . . . . . . . . . . . . . . 2903.7 Analiza przeycia . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

    3.7.1 Krzywa przeycia . . . . . . . . . . . . . . . . . . . . . . 2923.7.2 Model Coxa . . . . . . . . . . . . . . . . . . . . . . . . . 294

    3.8 Zadania do czci Wybrane procedury statystyczne . . . . . . . 298

    4 gRrra ka 3014.1 Pakiet graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

    4.1.1 Wykres paskowy . . . . . . . . . . . . . . . . . . . . . . . 3024.1.2 Histogramy dwuwymiarowy i dla dwch grup . . . . . . . 3034.1.3 Wykres ra wiatrw . . . . . . . . . . . . . . . . . . . . 3044.1.4 Wykres sonecznikowy . . . . . . . . . . . . . . . . . . . 3044.1.5 Wykres koowy . . . . . . . . . . . . . . . . . . . . . . . 3044.1.6 Wykres supkowy . . . . . . . . . . . . . . . . . . . . . . 3064.1.7 Wykres kropkowy . . . . . . . . . . . . . . . . . . . . . . 3074.1.8 Wykres torbowy . . . . . . . . . . . . . . . . . . . . . . . 3074.1.9 Wykresy rozrzutu, dwu- i wielowymiarowe . . . . . . . . 3084.1.10 Wykres macierzy korelacji . . . . . . . . . . . . . . . . . 3104.1.11 Wykres konturowy dwuwymiarowego rozkadu normalnego3104.1.12 Wykres diagnostyczny . . . . . . . . . . . . . . . . . . . . 3104.1.13 Wykres koniczyny . . . . . . . . . . . . . . . . . . . . . . 3124.1.14 Wielowymiarowy, jdrowy estymator gstoci . . . . . . . 3124.1.15 Wykresy konturowe . . . . . . . . . . . . . . . . . . . . . 3144.1.16 Wykres mapa ciepa . . . . . . . . . . . . . . . . . . . . . 3144.1.17 Wykres pro li obserwacji . . . . . . . . . . . . . . . . . . 3164.1.18 Interaktywne wykresy z pakietem iplots . . . . . . . . . . 3164.1.19 Wykres radarowy i twarze Chernoffa . . . . . . . . . . . . 318

    4.2 Pakiet graphics - pena kontrola . . . . . . . . . . . . . . . . . . . 3194.2.1 Funkcja plot() . . . . . . . . . . . . . . . . . . . . . . . . 3204.2.2 Funkcja matplot() . . . . . . . . . . . . . . . . . . . . . . 320

  • viii Spis treci

    4.2.3 Osie wykresu . . . . . . . . . . . . . . . . . . . . . . . . . 3214.2.4 Legenda wykresu . . . . . . . . . . . . . . . . . . . . . . 3224.2.5 Funkcja image() . . . . . . . . . . . . . . . . . . . . . . . 3234.2.6 Wyraenia matematyczne . . . . . . . . . . . . . . . . . . 3244.2.7 Kolory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3244.2.8 Waciwoci linii . . . . . . . . . . . . . . . . . . . . . . . 3264.2.9 Waciwoci punktw/symboli . . . . . . . . . . . . . . . 3274.2.10 Atomowe, niskopoziomowe funkcje gra czne . . . . . . . 3284.2.11 Interaktywne odczytywanie wartoci z wykresu . . . . . . 3344.2.12 Tytu, podtytu i opisy osi wykresu . . . . . . . . . . . . . 3344.2.13 Pozycjonowanie wykresu, wiele wykresw na rysunku . . 3354.2.14 Parametry gra czne . . . . . . . . . . . . . . . . . . . . . 336

    4.3 Pakiet lattice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3404.3.1 Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . 3414.3.2 Szablony wykresw . . . . . . . . . . . . . . . . . . . . . 3424.3.3 Formuy i wybr zmiennych . . . . . . . . . . . . . . . . 3424.3.4 Panele i mechanizm warunkowania . . . . . . . . . . . . 3424.3.5 Mechanizm grupowania . . . . . . . . . . . . . . . . . . . 3434.3.6 Obiekty klasy trellis . . . . . . . . . . . . . . . . . . . . . 3434.3.7 Legenda wykresu . . . . . . . . . . . . . . . . . . . . . . 3484.3.8 Pozycjonowanie wykresu, wiele wykresw na rysunku . . 3484.3.9 Proporcje jednostek na osiach i regua 45 stopni . . . . . . 3504.3.10 Motywy i parametry gra czne . . . . . . . . . . . . . . . 3524.3.11 Wicej o panelach . . . . . . . . . . . . . . . . . . . . . . 3524.3.12 Atlas funkcji gra cznych z pakietu lattice . . . . . . . . 3564.3.13 Przykad dla badania Diagnoza Spoeczna . . . . . . . . 366

    4.4 Pakiet ggplot2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3694.4.1 Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . 3694.4.2 Mapowania zmiennych na waciwoci wykresu . . . . . . 3714.4.3 Geometrie wykresw . . . . . . . . . . . . . . . . . . . . 3724.4.4 Warstwy wykresw . . . . . . . . . . . . . . . . . . . . . 3764.4.5 Mechanizm warunkowania . . . . . . . . . . . . . . . . . 3784.4.6 Motywy i kompozycje gra czne . . . . . . . . . . . . . . 3794.4.7 Ukad wsprzdnych i osie wykresu . . . . . . . . . . . . 3804.4.8 Pozycjonowanie wykresu, wiele wykresw na rysunku . . 3814.4.9 Agregaty i statystyki . . . . . . . . . . . . . . . . . . . . . 3824.4.10 Przykad dla badania Diagnoza Spoeczna . . . . . . . . 382

    4.5 Zadania do czci gRrra ka . . . . . . . . . . . . . . . . . . . . 385

    Opis zbiorw danych uytych w tej ksice 387

    Bibliogra a 389

    Skorowidz 393

  • Zanim zaczniemy t przygod

    Przedmowa do wydania trzeciego

    Pierwsze wydanie Przewodnika... zostao opracowane w latach 2006-2007, czyliponad 7 lat temu. Od tego czasu program R bardzo si zmieni. Liczba dodatko-wych bibliotek zwikszya si wielokrotnie, przekraczajcw tym roku cztery tysicebibliotek.Wmidzyczasie rozwin si rwnie silnik R. Zwersji 2.6.0, przezwersj2.15.1, a do wersji 3.0.1 wydanej w kwietniu 2013 roku.

    Rwnie dua zmiana dotyczy autora tego Przewodnika.... Przez te kilka latmiaemprzyjemno prowadziwykady, wiczenia i laboratoria dla studentwPo-litechniki Wrocawskiej i Warszawskiej, Uniwersytetu Warszawskiego i Wrocaw-skiego. Szkolenia dla pracownikw naukowych, biologw czy genetykw oraz pra-cownikw instytucji nansowych, bankw czy rmkonsultingowych.Miaemwicmoliwo obserwowania, w jaki sposb rne osoby poznaj R, co im uatwia a coutrudnia nauk i prac z tym programem.

    Moja robocza teoria dotyczca efektywnego poznawania Rwyrnia trzy etapynauki. Pierwszy etap mona nazwa zbieraniem motywacji. Pocztkujce osobyzauwaaj, e do nauki R trzeba woy troch wysiku i zastanawiaj si czy warto.Aby ich przekona, pry si muskuy R, pokazuje jakmona tworzy aplikacje sie-ciowe, animacje, jak prosto zbudowa wyra nowany model statystyczny, jak pro-sto wygenerowa raport czy powtrzy obliczenia dla zmody kowanych danych.Ten etap najlepiej przej suchajc prezentacji zaawansowanych uytkownikw R,na ywo czy w formacie video np. na portalu youtube.com.

    Drugi etap to poznawanie zasad funkcjonowania programu R, poznawanietechniki programowania w R, uczenie si lozo i pracy z tym pakietem, budo-wa mapy/atlasu poj zwizanych z programem R. Na tym etapie idealnie spraw-dzaj si podrczniki. Jeeli nie s powicone opisowi wskich, specjalistycznychrozwiza to mog zachowa aktualno przez wiele lat. Tempo uczenia monasobie indywidualnie dostosowa, niektre rozdziay pomin, inne przeczyta kil-kukrotnie. Na marginesach umieci komentarze i notatki. Mam nadziej, e natym etapie Przewodnik po pakiecie R bdzie bardzo pomocny.

    Trzeci etap to szlifowanie i uaktualnianie informacji o programie R. Pakietsi rozwija, warto poznawa nowe moliwoci, czy te stare moliwoci o ktrychwczeniej nie syszelimy. Tutaj idealnie sprawdza si czytanie blogw (pod ad-resem http://www.r-bloggers.com/ dostpny jest agregator kilkudziesiciu blo-gw o R), uczestnictwo w konferencjach, nieformalnych spotkaniach uytkowni-kw R, czy te prozaiczne googlowanie wok interesujcych nas tematw. Na tym

    ix

  • x Zanim zaczniemy t przygod

    etapie bardzo pomocny jest dostp do Internetu. Zarwno biblioteki programu Rzmieniaj si szybko, jak i szybko pojawiaj si nowe bardziej efektywne, czasemefektowne, rozwizania.

    Na kadym z tych etapw pomocne jest pracowanie z innym uytkownikie-m/uytkownikami R. Poniewa wikszo problemw mona rozwiza na wielesposobw, dlatego te bardzo duo mona nauczy si porwnujc rne sposobyrozwizania tego samego problemu. Ostatnio prowadzc zajcia zadaj studentomten sam projekt do wykonania, nastpnie najlepsze projekt s omawiane publicz-nie. To niesamowite, jak rne s te rozwizania i jak wiele interesujcych ciekawo-stek rne osoby wyszukuj. A to efektywniejsze wczytywanie danych, a to zmianakroju pisma na wykresie, a to animacja zanurzona w pliku pdf.

    Jeeli chodzi o takie ciekawostki czy nowoci, nie sposb przeceni uytecz-noci Internetu i portali typu http://stats.stackexchange.com (pytania doty-czce statystyki) lub http://stackoverflow.com/questions/tagged/r (pytaniadotyczce programowania). Gwnie z powodu atwoci wyszukiwania informacjiw Internecie. Wiedzc czego si szuka w kilka minut mona znale odpowiedna jakim forum, w dokumentacji czy roboczych notatkach innego uytkownika.Papierowa mini encyklopedia nie bdzie nawet w czci tak przydatna jak inter-netowa wyszukiwarka. Jednak uczenie si wycznie na bazie samych ciekawostek

    Dlatego te uwaam,e elektroniczne wersje

    podrcznikw toniezbyt dobry pomys.

    Wyszukiwaniew takich

    podrcznikach nie jesttak wygodne jak

    w Internecie. A tracisi wygod pracy zpapierow ksik.

    i zespoowych projektw (a i takie eksperymenty robiem) owocuje fragmentarycz-n wiedz. Ciekawostki s otaczane kolawymi rozwizaniami, czcionka na wykre-sie jest ciekawa ale sam wykres niedopracowany a dane bdnie przetworzone.

    Jest wiec w procesie nauki R miejsce dla podrcznikw. Na drugiem etapieuczenia zbudowanie bazy, szkieletu, przedstawienie krok po kroku lozo i pra-cy z programem R jest bardzo wane. Pozwala spojrze szerzej co jest dostpnena horyzoncie moliwoci. Uatwia pniejsze wyszukiwanie informacji i uaktu-alnianie naszej wiedzy o programie R. Uwaam wrcz, e dobry kurs programu Rto poczenie odpowiedniego podrcznika do samodzielnego czytania i projekto-wej pracy z rzeczywistymi problemami. Wymaga to czasu i wysiku, ale owocujeznacznie lepszymi efektami ni uczenie si od pocztku na samych przykadach.

    Przewodnik po pakiecie R powsta po to by towarzyszy w nauce, by przed-stawia atlas rozwiza, by wskazywa mielizny i rafy. Mam nadziej, e ta pozycjaoferuje szerokie a jednoczenie jednolite spojrzenie nawiele rozwiza dostpnychw R. Zarwno jeeli chodzi o moliwoci obliczeniowe, moliwoci w modelowa-niu statystycznym jak i moliwoci w zakresie prezentacji danych. Staraem sizachowa rosncy poziom trudnoci, przygotowujc atwe do zrozumienia i in-teresujce przykady z komentarzami. Zostawiajc te miejsce dla czytelnika dosamodzielnego sprawdzenia co si stanie.

    Trzecie wydanie przeszo gruntowny liing. Usunem informacje o pakietach,ktre ju nie s uywane (np. wietny pakiet CoCo zosta ju usunity z serwerwCRAN), dodaem informacje o aktualnie uywanych rozwizaniach, takich jak np.RStudio (rewelacyjny edytor do R). Wci ucz si te pisa. Przeformuowaemwiele zda, przykadw czy komentarzy sprzed kilku lat. Mam wraenie, e pewnerzeczy potra teraz przedstawi lepiej, zobaczymy co bd o tym myla za ko-lejnych kilka lat. Pisanie bloga jest moim zdaniem wietn praktyk jzyka. Chooczywicie zdaj sobie spraw, e jeszcze wiele rzeczy do poprawienia.

  • xi

    Zmiany dotycz rwnie formy. Zmieniem krj pisma na Minion Pro, zmie-niem sposb formatowania kodu R i sposb umieszczania komentarzy. Papieroweksiki nie mcz tak wzroku jak aktywnie wiecce ekrany. Autor ma pen kon-trol nad typogra i projektem ksiki, moe rozmieci tre tak by atwo byoporwna napis z lewej strony z napisem na prawej stronie. Przyjemny w czytaniukrj pisma moe pozytywnie nastawi czytelnika. To efekty, ktrych nie docenia-em kilka lat temu, teraz jednak przekonany jestem, e s one wane.

    Jest te kilka zupenie nowychpodrozdziaw, ktre odzwierciedlajmoje obec-ne zainteresowania. W wydaniu drugim rozbudowany zosta rozdzia o gra ceiwydajnymprzetwarzaniu.W tymwydaniu dodaemopisy pakietw knitr, slidifyi shiny pozwalajcych na wsparcie komunikacji pomidzy statystykiem a koco-wym odbiorc. Wicej miejsca powiciem tematowi powtarzalnych analiz i obli-cze, atwych do zwery kowania i powtrzenia.

    Powtarzalno bada odgrywa olbrzymi rol. Zarwno w nauce jak i prze-myle. Jest to tak wane zagadnienie, e powinien towarzyszy kursom ze statysty-ki i analizy danych dla wszystkich studentw nauk medycznych, przyrodniczychi oczywicie technicznych.Wprzemyle pozwala zwikszy produktywno i oszcz-dzi duo czasu, zarwno gdy wracamy do pewnego zagadnienia po pewnym cza-sie, jak i gdy musimy ponownie wykona pewien raport. W nauce moliwo od-tworzenia wynikw to fundamentalny wymg, kadego rzetelnego badania. Mamnadziej, e ten podrcznik przedstawi moliwoci R w zakresie bada powtarzal-nych.

    Na koniec chciabympodzikowawszystkimosobom, ktre przyczyniy si dopowstania tego wydania. Jest ich na szczcie zbyt wiele by wymieni je wszystkie.Najbardziej dzikuj mojej onie, Karolinie, bez ktrej nie tylko to wydanie ale tewiele innych projektw nigdy by nie powstao.

    Moj aspiracj przy pisaniu trzeciego wydania byo zbudowanie i pokazanieatlasu rozwiza dostpnych w R, pozwalajcych na zrozumienie moliwoci, lo-giki, schematw pracy z R. Programowanie w R moe by przyjemnoci, ktrawynika z braku ogranicze jak i z estetyki dostpnych rozwiza. Mam nadziej,e udami si t estetyk i t przyjemno pracy z danymi pokaza. ycz wic wielufantastycznych wrae w pracy z programem R.

    Przemysaw Biecek, Pary 2013

    Przedmowa do wydania drugiegoMiny ju ponad dwa lata od pierwszego wydania Przewodnika .... W midzy-czasie program R rozwija si w wykadniczym tempie i zapewni sobie pozycj wy-mienitego narzdzia do analizy danych. Liczba pakietw dostpnych w repozy-torium CRAN zwikszya si w cigu ostatnich dwch lat z 700 do 2400. Przyby-o wiele funkcjonalnoci, pewne ulegy zmianie, pewne rzeczy mona zrobi juznacznie atwiej. Widzc ilo zmian zaczem si zastanawia nad aktualizacj te-go podrcznika.

    Kolejna zachta do zmian przysza od czytelnikw od ktrych przez te dwa lataotrzymaem wiele listw. Cz listw ograniczajcych si do stwierdzenia dobra

  • xii Zanim zaczniemy t przygod

    robota cz z sugestiami, co warto zmieni, co warto doda, co lepiej usun. By-y te listy z pogrkami czy ultimatum, albo poprawi wskazany bd na stroniex w linii y albo zostan naraony na interwencj profesora Jana Miodka. Gorcodzikuj za listy i uwagi! Mio jest wiedzie, e kto powici troch czasu by po-dzieli si wraeniami, przesa kilka pomysw, wskaza co mu si podoba, a conie.

    Cz z propozycji rozszerzenia tej ksiki dotyczyo rozdziau dotyczcegostatystyki i data mining. Zamiast jednak doda kolejne sto stron do tej ksikistwierdziem, e waciwiej bdzie napisa kolejn powicon wycznie analiziestatystycznej danych w programie R z wykorzystaniem modeli liniowych i miesza-nych. Prace nad t pozycj trwaj i powinny by zakoczone przed kocem tegoroku.

    Cze uwag dotyczyo wielkoci czcionki. W pierwszym wydaniu uyem roz-miaru czcionki 10 punktw, dziki czemu ksika bya mniejsza i tym samym ta-sza. Poniewa jednak wiele osb narzekao na niewielkie literki, dlatego w tym wy-daniu uyem czcionki o rozmiarze 11 punktw co zwikszyo liczb stron, ale po-prawio czytelno.

    Poza rozmiarem czcionki wprowadziem nastpujce zmiany:

    rozbudowaem rozdzia powicony pisaniu wydajnych skryptw w progra-mie R, rosnce rozmiary zbiorw danych wymuszaj liczenie si z czasemoblicze,

    dodaem rozdzia powicony tworzeniu wasnych pakietw,

    rozbudowaem rozdzia powicony generowaniu zmiennych losowych,

    dodaem dwa podrozdziay opisujce funkcje gra czne i lozo tworzeniawykresw w pakietach lattice i ggplot2,

    sprawdziem czy w wersji R 2.15.1 (aktualnie najnowsza) dziaaj wszystkieopisane w tej ksice funkcje.

    Usunem te rne drobne usterki, ktre zostay mi wskazane przez uwanychczytelnikw. Pewnie te wprowadziem sporo nowych usterek, za wyledzenie kt-rych bd wdziczny uwanym czytelnikom.

    Na koniec chciabym szczeglnie podzikowa kilku osobom, ktre pored-nio lub bezporednio bardzo mi pomogy w pracy nad drugim wydaniem Prze-wodnika .... W pierwszej kolejnoci dzikuj onie, Karolinie Biecek, bez ktrejnieustannego wsparcia nie dabym rady ani przygotowa drugiego wydania anizrealizowa wielu innych projektw. Za wiele propozycji usprawnie, mody ka-cji, korekt i rozszerze pierwszego wydania chciabym podzikowa przyjacielowii wsppracownikowi dr hab. Pawowi Mackiewiczowi. Bardzo serdecznie chcia-bym podzikowa dr. Maciejowi Michalewiczowi i Justinowi Lindsleyowi, szefomnzLabs, oddziau badawczego rmy Netezza, za pomoc w nansowaniu konferen-cji WZUR (Warszawski/Wrocawski Zlot Uytkownikw R), pomoc w nansowa-niu mojego udziau w konferencjach use!R i umoliwienie mi realizacji ciekawychprojektw rozwojowych dotyczcych programuR.Dziki tej wsppracy atwiejmi

  • xiii

    zrozumie jakie s oczekiwania duych rm informatycznych co domoduw ana-litycznych oraz jakw tych zastosowaniach odnajduje si programR.Gorco chcia-bym podzikowa rwnie najlepszym wydawcom pod socem, panom dr. Ma-rianowi Gewertowi i doc. dr. Zbigniewowi Skoczylasowi, za pomoc przy edycjii korekcie tak pierwszego jak i drugiego wydania oraz olbrzymi kapita zaufaniabez ktrego ta ksika nigdy by si nie ukazaa.

    Przemysaw Biecek, Warszawa 2011

    Przedmowa do wydania pierwszegoSzanowny Czytelniku, trzymasz wanie w rku ksik od pocztku do koca po-wicon pakietowi R. Ksika ta powstaa po to, by zaprezentowa szeroki wa-chlarz moliwoci pakietu R i uatwi poznanie jego prostych i zaawansowanychaspektw. W sposb systematyczny przedstawia jzyk R, na licznych przykadachopisuje podstawowe funkcje, prezentuje przydatne biblioteki dostpne w tym ro-dowisku, opisuje popularne procedury statystyczne oraz funkcje do tworzenia gra-ki.

    Pozycja ta zacza powstawa w roku 2006, jakomateriay pomocnicze dlamo-ich studentw dzielnie poznajcych tajniki statystyki i analizy danych. Zostaa roz-budowana i uzupeniona, aby moga z niej skorzysta szersza grupa odbiorcw.Staraem si wybra materia tak, by t ksik chciay przeczyta:

    osoby, ktre chc pozna pakiet R od podstaw, syszay e warto i szukajagodnego wprowadzenia dla zupenych laikw,

    osoby korzystajce ju z R, znajce podstawy i chcce swoj wiedz usyste-matyzowa, uzupeni, rozszerzy, pogbi,

    osoby pracujce z R na co dzie (eksperci), szukajce podrcznej cigawki(trudno spamita np. nazwy wszystkich argumentw gra cznych) lub techcce upewni si, e o R wiedz ju (prawie) wszystko.

    Innymi sowy, mam nadziej, e kady znajdzie tu co dla siebie.Ksika podzielona jest na cztery czci. Pierwsza cz, to skrtowe przed-

    stawienie moliwoci pakietu R. Rozpoczyna si od wprowadzenia dla zupenychnowicjuszy, ale w miar upywu stron przedstawiane s kolejne, coraz bardziej za-awansowane informacje o jzyku oraz pakiecie R. Ta cz jest przygotowana zmy-l o osobach pocztkujcych i o osobach chccych swojwiedz oRuzupeni.Niejest zakadana jakakolwiek wstpna wiedza o pakiecie R. Zaczynamy od podstaw,ale jestem pewien, e rwnie spore grono zaawansowanych uytkownikw znaj-dzie tutaj co nowego. Dlatego warto przejrze t cz bez wzgldu na stopiezaawansowania.

    Kolejne czci maj charakter encyklopedyczny i mona je czyta w dowolnejkolejnoci. Cz druga pazuRrry przedstawia moliwoci jzyka R, o ktrychwarto wiedzie i z ktrych warto korzysta, a ktre nie znalazy si w innych cz-ciach.

  • xiv Zanim zaczniemy t przygod

    Najsilniejsz stron programu R jest potne wsparcie dla szeroko pojtychanaliz statystycznych.Wczci trzeciej pt. Wybrane procedury statystyczne przed-stawiono list funkcji statystycznych wykorzystywanych przy najpopularniejszychprocedurach statystycznych wraz z informacj, jak z tych funkcji korzysta i jakinterpretowa ich wyniki. Pakiet R wietnie nadaje si do tworzenia dobrze wygl-dajcych rysunkw, dlatego cz czwarta gRrra ka powicona jest mechani-zmom R umoliwiajcym tworzenie i mody kacje dobrze wygldajcych wykre-sw (zarwno prostych jak i bardzo wymylnych), schematw, gra k itp. Czczwarta koczy si prezentacj funkcji i argumentw gra cznych, dziki ktrymuytkownik ma pen kontrol nad tym co, jak i gdzie jest rysowane.

    Program R rozwija si dynamicznie i nieustannie. Ma tak wiele moliwoci, enie sposb wszystkich opisa. Dooyem wszelkich stara, by ta pozycja bya zro-zumiaa dla pocztkujcych uytkownikw i ciekawa dla uytkownikw zaawan-sowanych. Bd zobowizany czytelnikom za wszelkie uwagi i komentarze, ktrepozwol uczyni t pozycj czytelniejsz lub ciekawsz, zarwno te dotyczce za-wartoci jak i te dotyczce formy. Pod adresem http://www.biecek.pl/R/R.pdfznajduj si (w postaci elektronicznej) pierwsze 64 strony tej ksiki. Jest to, mamnadziej, wystarczajcy fragment, by przekona czytelnika, e warto bliej zapo-zna si z programem R. Ten fragment ksiki moe by drukowany i kopiowanyna uytek wasny. Mam nadziej, e pomoe on wielu osobom w pierwszym kon-takcie z R, a take zachci do nabycia caej ksiki w postaci drukowanej.

    Ksika tamoga powsta wycznie dzikimniejszej lubwikszej pomocy bar-dzo wielu osb, ktrym serdecznie dzikuj. Szczeglnie gorco dzikuj onie Ka-rolinie za jej wsparcie, wyrozumiao, wytrwao przy wielokrotnym czytaniukolejnych wersji i moc cennych uwag. Wiele cennych wskazwek, sugestii, propo-zycji i uwag do kolejnych wersji otrzymaem od prof. dra hab. Jana Mielniczuka,ktry powici bardzo wiele czasu korygujc moje liczne pomyki, serdecznie muza to dzikuj. Za cenne uwagi merytoryczne chciabym podzikowa dr Janowiwikowi i dr hab. Pawowi Mackiewiczowi a rwnie Grzegorzowi Hermanowi-czowi i moim studentom, ktrzy czasem dzielili si uwagami, wtpliwociami orazpomysami na zmiany. Za pomoc przy wydawaniu tej ksiki chc podzikowaprof. dr hab. Jackowi Koronackiemu oraz wydawcom: dr. Marianowi Gewertowii doc. dr. Zbigniewowi Skoczylasowi, bez ktrych pomocy i zaangaowania ksikata nie powstaaby w postaci papierowej. Korzystajc z okazji dzikuj moim wie-loletnim wsppracownikom dr in. Adamowi Zagdaskiemu i dr in. ArturowiSuchwace za zaraenie mnie pakietem R i za wiele wsplnie realizowanych pro-jektw wykonanych w programie R i nie tylko. Specjalne podzikowania skadamrwnie moim przeoonym: prof. dr hab. Teresie Ledwinie i prof. dr hab. Stani-sawowi Cebratowi za pozostawienie mi swobody w wyborze zada do realizacji.

    To tyle tytuem wstpu. ycz owocnej pracy z programem R.

    Przemysaw Biecek, Wrocaw 2008

  • Rozdzia 1

    agodne wprowadzenie do R

    1.1 Jak korzysta z tej ksiki?Aby uatwiwyszukiwanie informacji, pewne fragmenty tekstu zostaywyrnioninnym krojem pisma lub dodatkowymi symbolami. Fragmenty skryptw w jzy-ku R oraz wyniki ich wykonania bd przedstawiane w nastpujcych ramkach. Tym sposobem

    kultowy przykadz Hello world mamyza sob.# Komentarz: moj pierwszy program.

    for (i in 1:10) {cat("Hello world !!!\n")

    }

    Jeeli razem z kodem R bdzie pokazywany rwnie wynik wykonania tegokodu, wtedy linie z wynikiem bd oznaczone podwjnym komentarzem ##.substr("Co jest supeR?", start=13, stop=13)## [1] "R"

    Czasem tak bywa, e a si prosi o komentarz do tekstu, nawet jeeli nie jest

    R is the lingua francaof statistical research.Work in all otherlanguages should bediscouraged.

    Jan de Leeuwfortune(78)

    to komentarz merytoryczny. Takie komentarze bd umieszczane na marginesie.Cz z zamieszczonych na marginesie komentarzy to wybrane cytaty znanychuytkownikw programu R. Jeeli przypadn Wam one do gustu, to wicej cyta-tw znanych uytkownikw programu R znale mona w pakiecie fortunes.

    Fragmenty tekstu zasugujce na szczegln uwag oraz komentarze do przed-stawianego zagadnienia bd oznaczane krzyw opisan rwnaniem w ukadziebiegunowym G = {(,) = 1 + 1/||, } (czyli arwk). Przykadponiej.

    Autor yje w wiecieliczb, wybaczcie mubrak poczuciahumoru.Przyp. ony.

    !!

    ! ! ! !! Pamitaj, eby nie wychodzi z mokr gow, gdy wieje silny wiatr!

    Odnoniki do interesujcych pozycji (zarwno w postaci papierowej jak i elek-tronicznej) zostay zgromadzone na kocu tej ksiki. Do pozycji ksikowych lubadresw stron internetowych bdziemy odnosili si podajc pozycj rdaw spisieliteratury. Podobnie jak w ksice [1].

    1

  • 2 agodne wprowadzenie do R

    Piszc o funkcjach, pakietach, elementach jzyka stosowa bdziemy czcionko staej szerokoci znakw. Podajc angielskie nazwy bdziemy je oznaczakursyw. Przy pierwszym wymienieniu nazwy funkcji z niestandardowego pakie-tu zaznaczymy rwnie w jakim pakiecie ta funkcja jest dostpna. Zapis ggplot2::qplot() oznacza, e funkcja qplot() znajduje si w pakiecie ggplot2. Czasemfunkcja o tej samej nazwie dostpna jest w rnych pakietach, wskazujc w ten spo-sb jawnie w ktrym pakiecie dana funkcja si znajduje pozwala na jednoznaczneokrelenie o ktr funkcj chodzi. Rwnie w sytuacji gdy do uycia danej funkcjipotrzeba zainstalowa lub wczy niestandardowy pakiet, warto wiedzie w ja-kim pakiecie danej funkcji szuka. Na kocu tej ksiki znajduje si indeks funkcjizarwno alfabetyczny jak i w podziale na pakiety.

    Przy nauce nowych rzeczy bardzo przydatne s zadania, ktre mona samo-dzielnie rozwiza. Tak jest te w przypadku pakietu R, dlatego do kadego roz-dziau przygotowana zostaa lista zada wery kujcych zdobyt wiedz. Zadaniaumieszczone s na kocu kadego z rozdziaw i podzielone s zewzgldu na rnepoziomy trudnoci. Pliki z przykadowymi odpowiedziami znajduj si pod adre-sem http:\\www.biecek.pl\R\. Na tej stronie umieszczane s rwnie dodatkowemateriay uatwiajce poznawanie pakietu R.

    1.2 Sw kilka o projekcie R

    R to zarwno nazwa jzyka programowania, nazwa platformy programistycznejwyposaonej w interpreter tego jzyka oraz nazwa projektu, w ramach ktregorozwijany jest zarwno jzyk jak i rodowisko. W dalszej czci ksiki bdziemykorzystali z nazwy R, majc na myli tak jzyk programowania, platform progra-mistyczn jak i zbir bibliotek (pakietw), w ktre wyposaona jest ta platforma.

    R jest czsto nazywany pakietem statystycznym. Jest tak z uwagi na olbrzymiliczb dostpnych funkcji statystycznych. Moliwoci R s jednak znacznie wik-sze. W Internecie mona znale przykady wykorzystania R do automatycznegogenerowania raportw, wysyania maili, rysowania fraktali, czy renderowania trj-wymiarowych animacji. W tej ksice skupimy si wycznie na najpopularniej-szych moliwociach R. Jednak czytelnik, ktry dobrze pozna przedstawione w tejksice podstawy, nie bdzie mia problemw ze zrozumieniem zasad funkcjono-wania innych pakietw.

    Pierwsza wersja R zostaa napisana przez Roberta Gentlemana i Rossa Iha-ke (znanych jako R&R:) pracujcych na Wydziale Statystyki Uniwersytetu w Auc-kland. Pakiet R pocztkowo suy jako pomoc dydaktyczna do uczenia statystykina tym uniwersytecie. Jednoczenie, poniewa by to projekt otwarty, bardzo szyb-ko zyskiwa na popularnoci. Od roku 1997 rozwojem R kierowa zesp ponaddwudziestu osb nazywanych core team. W zespole tym znaleli si eksperci z r-nych dziedzin (statystyki, matematyki, metod numerycznych oraz szeroko pojtejinformatyki) z caego wiata. Liczba osb rozwijajcych R szybko rosa, a aktualnierozwojem projektu kieruje fundacja e R Foundation for Statistical Computingliczca setki aktywnych uczestnikw. Ponadto w rozwj R maj wkad tysice osbz caego wiata publikujce wasne biblioteki/pakiety najrniejszych funkcji znaj-

  • Sw kilka o projekcie R 3

    dujcych zastosowania w wielu dziedzinach. Liczba bibliotek dostpnych dla uyt-kownikw R szybko ronie, przekraczajc w poprzednim roku liczb 4000. A jestte znaczca liczba pakietw dostpnych w nieformalnym obiegu.

    Jzyk R by wzorowany na jzyku S, ktry zosta opracowany w laboratoriachBella. Z tego te powodu jzykR jest bardzopodobnydo jzyka S. ProgramywSdzia-aj pod R lub mona je prosto zmody kowa tak, by dziaay. Wiele funkcji w Rma dodatkowe argumenty dodane po to, by zapewni zgodno z S. Dziki temu,e jzyki R i S s do siebie podobne moemy wykorzystywa liczne ksiki do pa-kietu S do nauki jzyka R jak i do poznania dostpnych funkcji statystycznych. Bar-dzo dobr ksik do nauki jzyka S jest ksika Johna Chambersa [6] a do naukifunkcji statystycznych dostpnych w programie S polecam pozycj Briana Everit-ta [3]. Uzupenieniem do licznych pozycji ksikowych jest olbrzymia liczba stroninternetowych oraz dokumentw elektronicznych szczegowo przedstawiajcychrozmaite aspekty programu i jzyka R. Pod koniec roku 2007 ukazaa si bardzo ob-szerna i godna polecenia ksika Michaela Crawleya [4] przedstawiajca zarwnojzyk R jak i wiele procedur statystycznych zaimplementowanych w programie R.Pojawiaj si te i bd si pojawiay liczne ksiki powicone specjalistycznymzastosowaniom programu R, jak np. wietna pozycja przygotowana przez PaulaMurrella powicona gra ce [33], ksika autorstwa Juliana Farawaya powico-na modelom liniowym [22], czy kolejna pozycja Briana Everitta przedstawiajcapodstawy statystyki [21]. Wydawca Springer ma w ofercie ponad 45 ksiek o pro-gramie R wydanych w serii Use R!, kada z tych pozycji traktuje o jednym wybra-nym zagadnieniu, takim jak analizy danych przestrzennych, wizualizacja danych,analizy danych socjologicznych, genetycznych itp.

    Przejcie z jzyka S na jzyk R jest bardzo proste. Rwnie osoby korzystaj-

    Overall, SAS is about11 years behind R andS-Plus in statisticalcapabilities (last year itwas about 10 yearsbehind) in myestimation.

    Frank Harrell (SASUser, 1969-1991)fortune(10)

    ce z innych platform statystycznych takich jak Matlab, Octave, SPSS, SAS itp. niebd miay wikszych problemw z przestawieniem si na pakiet R. Istnieje wieledokumentw przedstawiajcych rnice pomidzy danym jzykiem a R oraz za-wierajcych rady dla uytkownikw innych pakietw jak szybko zacz korzystaz R. List wielu przydatnych wskazwek znajdziemy pod adresem [2].

    Program R jest projektem GNU opartym o licencje GNU GPL, oznacza to, ijest w zupenoci darmowy zarwno do zastosowa edukacyjnych jak i bizneso-wych.Wicej o licencji GNUGPLmona przeczyta pod adresem [5]. Platforma Rwyposaona jest w wietn dokumentacj, dostpn w postaci dokumentw pdflub stron html. Aktualnie dokumentacja ta w wikszoci jest angielskojzyczna,niektre pliki pomocy maj ju swoje lokalizacje, w tym polsk.

    Jzyk R jest jzykiem interpretowanym a nie kompilowanym. Korzystanie z Rsprowadza si do podania cigu komend, ktremaj zosta wykonane. Kolejne ko-mendy mog by wprowadzane linia po linii lub te mog by wykonywane jakoskrypt (czyli plik tekstowy z zapisan list komend do wykonania). Wiele osb

    Programy napisanew jzykach takich jakC, C++, Pascal itp.mona kompilowa.Programyskompilowane dorozkazw rozumianychbezporednio przezprocesor s z reguyszybsze, ale programyz reguy trudniejnapisa i trwa toduej. Jzykiinterpretowane(skryptowe) nadaj siwietnie do szybkiegopisania programw,w sytuacji, gdy czaswykonania nie jestkluczowy.

    uwaa (czsto susznie), e jzyki interpretowane s wolne i wymagaj duo pa-mici, jednak obecne moliwoci komputerw pozwalaj w standardowych zasto-sowaniach zupenie si tym nie przejmowa. Ponadto istnieje wiele dodatkowychnarzdzi pozwalajcych na kompilowanie kodu R np. podczas wykonywania (ang.just in time compilation), rozwizania zwikszajce wydajno programu R przed-stawione s w rozdziale 2.9.3.1.

  • 4 agodne wprowadzenie do R

    Osoby, ktre nie chc pamita skadni komend R mog skorzysta z istniej-cych nakadek i GUI. Przykadowo, korzystajc z okienkowego interfejsu pakie-

    GUI to skrt od ang.Graphical UserInterface, czyli

    gra cznego interfejsuuytkownika.

    tu Rcmdr mona wyklika wiele rnych raportw statystycznych, podsumowai wykresw. Pakietw wspierajcych takie klikane analizy jest znacznie wicej, np.Deducer, rattle itp. Zdecydowanie jednak zachcam do przeamania niechci dopamitania i wpisywania komend. Naprawd warto samodzielnie przygotowywai mody kowa skrypty! Po pewnym czasie staje si to proste i umoliwia du au-tomatyzacj pracy oraz znaczne zaoszczdzenie czasu.

    Pierwszy podrozdzia zakocz przedstawieniem czterech gwnych (ale niejedynych) zalet platformyR.W skrcie, s to cztery powody dla ktrych programRdeklasuje konkurencj.

    ProgramRpozwala na tworzenie i upowszechnianie pakietw zawierajcychnowe funkcjonalnoci. Obecnie dostpnych jest przeszo 4000 pakietw dornorodnych zastosowa, np. rgl do gra ki trjwymiarowej, lima do ana-lizy danych mikromacierzowych, seqinr do analizy danych genomicznych,psy z funkcjami statystycznymi popularnie wykorzystywanymi w psycho-metrii, geoR z funkcjami geostatystycznymi, Sweave do generowania rapor-tw w jzyku LATEX i wiele, wiele innych. Kady mone napisa swj wasnypakiet i udostpni go innym osobom.

    Program R pozwala na wykonywanie funkcji z bibliotek napisanych w in-nych jzykach (C, C++, Fortran) oraz na wykonywanie funkcji dostpnychw programie R z poziomu innych jzykw (Java, C, C++, pakiety Statistica,SAS i wiele innych). Dziki temu moemy np. znaczn cz programu na-pisa w Javie, a R wykorzystywa jako du zewntrzn bibliotek funkcjistatystycznych.

    Program R jest w zupenoci darmowy do wszelkich zastosowa zarwnoprywatnych, naukowych jak i komercyjnych. Rwniewikszo pakietwna-pisanych dla R jest darmowych i dostpnych w ramach licencji GNU GPLlub GNU GPL 2.0.

    W programie R mona wykona wykresy o wysokiej jakoci, co jest bar-dzo istotne przy prezentacji wynikw. Wykresy te nawet przy domylnychPanie, takie rzeczy totylko w eRzeustawieniach wygldaj znacznie lepiej od podobnych wykresw przygoto-wanych w innych pakietach.

    1.3 Instalacja

    Instalacja pakietu R skada si z dwch etapw. Pierwszy, to zainstalowanie pod-stawowego rodowiska (tzw. base version) wraz z podstawowymi bibliotekami. Tenpodstawowy zestaw ju ma potne moliwoci w wikszoci przypadkw wystar-czajce do analizy danych, rysowania wykresw i wykonywania innych typowychzada. Drugi etap, to uzupenianie wersji podstawowej przez doinstalowanie pa-kietw z przydatnymi funkcjami. Aktualnie dostpnych jest ponad cztery tysicepakietw! Nie ma jednak potrzeby instalowania ich wszystkich od razu. Z regu-

  • Instalacja 5

    y w miar uywania okazuje si, e przydaaby si nam jaka dodatkowa funkcja,ktra jest ju dostpna w pewnym pakiecie i dopiero wtedy warto taki pakiet do-instalowa. Poniej znajduje si krtka informacja jak atwo przebrn przez obaetapy instalacji.

    Instalacja rodowiska

    Dlawikszoci systemwoperacyjnych,w tymwszystkich dystrybucji Linuxa,Uni-xa, dla wersji Windowsa poczwszy od Windowsa 95 i dla MacOSa, pakiet R jestdostpny w postaci rdowej oraz skompilowanej. Najatwiej jest zainstalowa Rkorzystajc ze skompilowanego pliku instalacyjnego. Instalacja jest prosta, wystar-czy wybra jeden z serwerw mirror, na ktrym umieszczony jest plik instalacyj-

    Mirror to tzw. serwerlustrzany, w ktrymznajduje si dokadna(lustrzana) kopiaplikw. Jeeli chcemycign plikiz serwera, ktry jestdaleko od naszegokomputera i z ktregokorzysta wiele osb tociganie bdziewolne. Dlatego wartowybra serwerpooony moliwieblisko, o maymobcieniu.

    ny, cign ten plik, uruchomi go, a nastpnie postpowa zgodnie z instrukcja-mi. Adresy serwerw z kopiami plikw instalacyjnych pakietu R znale monapod adresem http://cran.r-project.org/mirrors.html. W wikszoci przy-padkw najszybciej cigniemy program R z wrocawskiego serwera [7].

    Szczegow instrukcj instalacji mona znale pod adresem [8], przyda siona osobom chccym zainstalowa nietypow kon guracj R.W dalszej czci b-dzie opisywana 64 bitowa wersja pakietu R przygotowana dla systemu Windows.Na dzie dzisiejszy najnowsz wersj jest 3.0.1. Aby przystpi do instalacji nale-y uruchomi plik R-3.0.1-win.exe. Caa instalacja ogranicza si praktycznie doklikania przycisku Next. Po zainstalowaniu R utworzy we wskazanym miejscu(najczciej bdzie to katalog c:/Program Files/R/R-3.0.1) struktur podkata-logw z plikami potrzebnymi do dziaania.

    Po instalacji w utworzonej strukturze znajd si rne podkatalogi.W tym: ka-talog bin (z plikami wykonywalnymi R), doc (z ogln dokumentacj R), library(w ktrym instalowane s kolejne pakiety) i innymi, mniej wanymi. Platform Rmona uruchomi w trybie tekstowym (uruchamiajc plik R.exe) lub te w trybiez prostym okienkowym GUI (uruchamiajc plik Rgui.exe). Oba pliki do urucho-mienia rodowiska znajduj si w katalogu bin. Wersja tekstowa moe si przyda,

    Poczwszy od wersji2.12.0 plik Rgui.exeznajduje si w katalogubin/i386 dla wersji 32bitowej i bin/x64 dlawersji 64 bitowej.

    jeeli nie chcemy traci zasobw na inicjowanie interfejsu gra cznego. Wybr try-bu uruchomienia proponujemy oprze na prostej zasadzie: jeeli nie wiesz, czymte tryby si rni, to uruchom Rgui.exe.

    !!

    ! ! ! !!

    Wygodn waciwoci rodowiska R jest to, e mona je urucha-mia bez instalowania. Mona wic skopiowa rodowisko R na py-t CD, na pendrive lub dysk przenony i uruchamia na dowolnymkomputerze bez potrzeby instalacji.

    Trudno jest podaminimalne wymagania sprztowe niezbdne do dziaania R.Jeszcze nie zdarzyo mi si nie mc uruchomi tego pakietu na napotkanym kom-puterze. Mona miao przyj, e 256MB RAM, procesor klasy Pentium lub wy-szej i kilkadziesit MB miejsca na dysku twardym w zupenoci wystarcz. Do pe-nego komfortu przyda si szybszy procesor, wicej RAM i wicej miejsca na dyskutwardym (bioinformatyczne zbiory danych potra zajmowa bardzo duo miej-sca na dysku i w RAM). Program R przechowuje dane w pamici RAM, wic doanaliz duych zbiorw danych potrzebne jest duo wolnej pamici RAM. Jeeli

  • 6 agodne wprowadzenie do R

    dysponujemy maszyna wyposaon w wicej ni 2GB RAM to powinnimy uy-wa 64bitowej wersji R. Pierwsza o cjalna wersja 64bitowa to 2.11.0. Wersja 64 bi-towa umoliwia uycie caej dostpnej pamici operacyjnej, w przypadku wersji32bitowej wykorzysta mona jedynie od 2 do 4GB w zalenoci od systemu ope-racyjnego

    !!

    ! ! ! !!

    Osoby uywajce programu R do bardzo wymagajcych obliczenio-wo analiz powinny raczej uywa Linuxowej lub Unixowej wersji R.W tych systemach operacyjnych zarzdzanie pamici jest wydaj-niejsze przez co R dziaa (odrobin) szybciej. Dla linuxw dostpne

    s te dodatkowe narzdzia pozwalajce na wykorzystanie wielowtkowoci i in-nych mechanizmw systemowych (np. funkcji fork()).

    Instalacja i adowanie pakietwJak ju pisalimy, po zainstalowaniu podstawowego zbioru bibliotek programRmaju spore moliwoci. Prawdziwa potga kryje si w setkach dodatkowych pakie-tw, w ktrych znajduj si tysice rnych funkcji (funkcje w programie R pogru-powane s w pakietach/bibliotekach). Po uruchomieniu systemu R kolejne pakietymona zainstalowa funkcj install.packages(). Ponisze polecenie instalujepakiet Rcmdr wraz z pakietami zalenymi, wymaganymi do jego dziaania.install.packages("Rcmdr", dependencies = TRUE)

    Mona te zainstalowa nowypakietwybierajc zmenuopcj install package(s).Przy instalacji pierwszego pakietu zostaniemy zapytani z jakiego serwera lustrza-nego chcemy korzysta.

    Po zainstalowaniu nowego pakietu, pliki z danymi, funkcjami i plikami po-mocy znajd si na dysku twardym komputera. Wszystkie pakiety s wgrywanejako podkatalogi do katalogu library. Aby mc skorzysta z wybranych funkcjinaley przed pierwszym uyciem zaadowa (wczy) odpowiedni pakiet. Po ka-dym uruchomieniu platformy R adowane s pakiety podstawowe takie jak: base,graphics, stats, itp. Aby skorzysta z dodatkowych funkcji lub zbiorw danych,naley zaadowa (wczy) pakiet, w ktrym si one znajduj (zakadamy, e pa-kiety te zostay ju zainstalowane). Pakiety wcza si poleceniem library().

    Ponisza instrukcja wcza pakiet Rcmdr. Gdyby ten pakiet nie by zainstalo-wany, to pojawiby si poniej przedstawiony komentarz.library(Rcmdr)## Error in library(Rcmdr) : there is no package called 'Rcmdr'

    Jak ju pisalimy, aktualnie dostpnych jest ponad 3500 pakietw, ktre moe-my dodatkowo zainstalowa.W tak duym zbiorze trudno czasem odnale pakietz interesujc nas funkcjonalnoci. Dlatego, przedstawiajc nowe funkcje bdzie-my korzysta z notacji nazwaPakietu::nazwaFunkcji(). Zapis ggplot2::qplot()oznacza, e funkcja qplot() znajduje si w pakiecie ggplot2. Ten pre x pomija-my dla pakietw base, stats, utils i graphics, ktrych nie trzeba dodatkowowcza, s automatycznie wczane z chwil startu rodowiska R. W skorowidzu,znajdujcym si na kocu ksiki, funkcje s wymienione zarwno w kolejnoci

  • RStudio, uniwersalny edytoR 7

    alfabetycznej jak i po pogrupowaniu w pakiety. Jeeli znamy nazw funkcji i chce-my dowiedzie si w jakim pakiecie ta funkcja si znajduje a nie mamy tej ksikipod rk, to moemy wykorzysta funkcj help.search(). Przeszuka ona wszyst-kie zainstalowane pakiety w poszukiwaniu funkcji o wskazanej nazwie lub funkcji,w ktrych opisie wystpio zadane sowo kluczowe. Wicej o tej funkcji i innychsposobach wyszukiwania informacji o funkcjach napiszemy w podrozdziale 1.5.2.

    Po zaadowaniu odpowiedniego pakietumoemykorzysta z dostpnychwnimfunkcji podajc ich nazw. Moemy te rcznie wskaza, z ktrego pakietu funkcjchcemyuruchomi, co jest przydatne, gdy funkcje o identycznych nazwach znajdu-j si w kilku zaadowanych pakietach. Przykadowo zarwnow pakiecie epitoolsjak i vcd znajduje si funkcja oddsratio() o tej samej nazwie ale innym dziaaniu.Aby wskaza, z ktrego pakietu chcemy wybra funkcj naley uy operatora ::lub :::. Operator :: pozwala na odnoszenie si wycznie do publicznych funkcjiz pakietu, podczas gdy operator ::: umoliwia odnoszenie si rwnie do funkcjiprywatnych.

    Oba ponisze wywoania dotycz funkcji seq() z pakietu base, drugi sposbjest szczeglnie przydatny, gdy wystpuje kolizja nazw funkcji z rnych pakietw.

    seq(10)base::seq(10)

    Jeeli nie uyjemy tego operatora, a dojdzie do kolizji nazw, to programR uyjefunkcji z ostatnio zaadowanego pakietu.

    1.4 RStudio, uniwersalny edytoRJeeli wykorzystujemy R do prostych oblicze, nie piszemy wasnych funkcji i niezaley nam na powtarzaniu wykonywanych analiz, to moemy komendy wpisywabezporednio w linii komend konsoli R. Jednak przy wikszych programach lubgdy zaley nam na moliwoci powtarzania analiz, potrzebny nam bdzie edytor,w ktrym bdziemy mogli tworzy i edytowa skrypty R. List ponad dwudziesturnych edytorw wspierajcych skadni jzyka R przedstawiono na stronie [41].W ostatnich latach najwiksz i wci rosnc popularno zdoby bezpatny edy-tor RStudio opracowany przez rm o tej samej nazwie. Ten edytor dostpny jestzarwnona platformWindows, Linux jak iMacOS,wspiera onwiele zaawansowa-nych pakietw i funkcjonalnoci R. Obecnie deklasuje on konkurencje, nie bdzie-mywic pisa o konkurencji. RStudio pobra ze strony http://www.rstudio.com/.Przykadowy wygld tego programu jest przedstawiony na rysunku 1.1).

    Korzystanie z tego edytora jest bardzo intuicyjne. Z ciekawszych funkcjimonawymieni:

    Po zainstalowaniuRStudio domylniewykorzystujenajnowszz zainstalowanychwersji programu R.Mona to oczywiciezmieni wustawieniach.

    zarzdzanie wieloma plikami/projektami,

    moliwo automatycznego wysyana caego skryptu lub fragmentu kodudo konsoli R. Po zaznaczeniu okrelonego fragmentu kodu po naciniciuCtrl-Enter zadany fragment bdzie wykonany w konsoli R.

    wywietlanie obiektw (nazwa, klasa, wymiary) obecnychwprzestrzeni nazw,

  • 8 agodne wprowadzenie do R

    R .: Przykadowywygld paneli edytora RStudio. Na czterech panelach widocz-ne s: okno pozwalajce na edycje kodu, okno pozwalajce na podgld zmiennych zaado-wanych do globalnej przestrzeni nazwR, konsola programuR do ktrej moemywpisywabezporednio polecenia oraz okno w ktrym domylnie wywietlane s pliki pomocy orazwykresy.

    edytor danych, funkcji i innych obiektw R, po klikniciu na nazw zbiorudanych obecnego w przestrzeni nazw mamy moliwo edycji tego obiektu,jest to czsto wygodniejszy sposb ni uycie funkcji fix() czy edit(),

    uproszczony sposb wczytywania danych z plikw poprzez menu,

    podwietlanie sw kluczowych i funkcji,

    kontekstowe uzupenianie nazw funkcji, zmiennych, waciwoci, argumen-tw funkcji (gdy rozpoczynamy pisanie nazwy funkcji, zmiennej lub argu-menty pojawia si lista wszystkich sw, ktre pasuj w danym kontekcie),

    zwijanie/rozwijanie kodu funkcji i ptli,

    wsparcie dla pakietw knitra, Sweave i shiny, atwa nawigacja po wstaw-kach kodu,

    domykanie otwartych nawiasw, cudzysoww, wraz z inteligentnym zazna-czaniem zawartoci (dwukrotne kliknicie wewntrze nawiasu, zaznacza ca-a zawarto nawiasu),

    inteligentne wstawianie wci poczone z rozpoznawaniem skadni (czylinowe wcicie dodawane jest w ptlach, funkcjach itp),

    interaktywny debugger (na dzie dzisiejszy dostpny jedynie w wersji dewe-loperskiej, ale niedugo bdzie te dostpny w wersji o cjalnej).

  • Startujemy 9

    1.5 Startujemy

    Zakadamy, e czytelnik ma ju zainstalowany na dysku program R. Warto na bie-co i wasnorcznie sprawdza na komputerze reakcje R na opisywane w tej ksi-ce polecenia. Jeeli jaki fragment nie jest zrozumiay, prosz pomin go i czytadalej. Niektre komentarze i uwagi przeznaczone s dla odrobin bardziej zaawan-sowanych czytelnikw, nie ma si wic co zraa, jeeli nie wszystko bdzie jasneprzy pierwszym czytaniu.

    1.5.1 Pierwsze uruchomienie

    Po zainstalowaniu programu R, czas na pierwsze jego uruchomienie. W systemieWindows najlepiej uruchomi plik Rgui.exe z katalogu bin lub bin\x64 dla Rwwersji 3.0.x. Uruchamia onR zwbudowanym interfejsemgra cznym. ProgramRmona uruchomi rwnie w trybie wsadowym lub trybie tekstowym, ale to jesttemat, ktry omwimy w rozdziale 2.5. Polecenie Rgui nie dziaa pod systememLinux, w tym przypadku R moemy uruchomi poleceniem R lub korzystajc z in-nego interfejsu gra cznego. W tym i kolejnym podrozdziale bd przedstawianeprzykady dziaania programu Rgui.exewwersji dlaWindows. Nazwy funkcji i ar-gumentw nie zale od systemu operacyjnego.

    Po uruchomieniu R pojawi si ekran powitalny oraz wywietli si znak zachty>. Znak ten oznacza, e platforma R jest gotowa do realizacji kolejnego polecenia.Efekt uruchomienia okienkowej wersji R przedstawiony jest na Rysunku 1.2.

    Tak jak pisalimyw rozdziale edytoR,przyjemniej si pracujez programem RStudioni z surowym R.

    !!

    ! ! ! !!

    Znak > jest znakiem zachty do wprowadzenia kolejnych polece.Jest wywietlany tylko, gdy platforma zakoczya ju wykonywaniepolecenia wprowadzonego w poprzedniej linii. Jeeli nowa linia roz-poczyna si znakiem + (znakiem kontynuacji), to znaczy, e polece-

    nie wpisane w poprzedniej linii nie zostao jeszcze zakoczone i platforma czekana dalsz jego cz (np. rozpoczta jest ptla, otwarty jest nawias lub cudzysw).Jeeli nowa linia nie rozpoczyna si adnym znakiem, to znaczy, e R jest w trakciewykonywania jakiego czasochonnego polecenia lub te czeka na reakcje uyt-kownika (kliknicie myszk lub nacinicie ktrego klawisza na klawiaturze). Je-eli nie wiemy na coR czeka, to klawiszem ESC przerywamy aktualnie wykonywanprzez R czynno i wracamy do znaku zachty.

    Pierwsze polecenie, ktre warto przewiczy to zamknicie platformy R.

    q()

    Po wykonaniu tego polecenia zostaniemy zapytani, czy zachowa aktualny stanpracy, nastpnie rodowisko R zostanie zamknite.

    Jeszcze nic niezrobilimy, wicmona niezachowywa stanupracy.Potra my ju zamkn programR, sprbujmy teraz znalemotywacj do dal-

    szej nauki. Dla wielu pakietw oraz funkcji dostpnych w programie R zostayprzygotowane prezentacje, pokazujce moliwoci danego pakietu lub funkcji. Ta-kie prezentacje uruchamia si funkcj demo(utils). Zobaczmy kilka ciekawszychprezentacji! Aby to zrobi naleywpisa do konsoli jedn z nastpujcych linii a na-stpnie nacisn klawisz ENTER.

  • 10 agodne wprowadzenie do R

    R .: Okno powitalne, otrzymane po uruchomieniu programu R.

    Poniszym poleceniem uruchamiamy klikany interfejs R.

    library(Rcmdr)

    A teraz uruchomimy kilka prezentacji dla funkcji persp() (rysowanie rzutw),pakietu graphics, znakw Kanji.

    demo(persp)demo(graphics)demo(Japanese)

    Aby zobaczy prezentacj pakietu rgl (gra ka trjwymiarowa) musimy najpierwten pakiet wczy.

    library(rgl)demo(rgl)

    Teraz powinnimy by ju wystarczajco zmotywowani. Kolejny podrozdziaprzedstawia poszczeglne opcje menu w okienkowej wersji R.

    1.5.2 Gdzie szuka pomocy?

    Gdyniewiemy jak co zrobi, to najatwiej i najszybciej jest zapyta si kogo, kto towie i chce nam podpowiedzie. W sytuacji, gdy nie mamy takiej osoby pod rk Roferuje bogaty system pomocy.

    R will always be arcaneto those who do notmake a serious effort

    to learn it. It is **not**meant to be intuitive

    and easy for casualusers to just plunge

    into. It is far toocomplex and powerful

    for that. But therewards are great forserious data analystswho put in the effort.

    Berton Gunterfortune(196)

    Pierwszym rdem pomocy s wbudowane funkcje R uatwiajce wyszukiwa-nie informacji. Oto lista najbardziej przydatnych:

    Funkcja help() wywietla stron powitaln systemu pomocy R. Na tej stro-nie opisane s szczegowo wymienione poniej funkcje.

  • Startujemy 11

    Funkcje help("nazwaFunkcji") i ?nazwaFunkcji wywietlaj stron z po-moc dla funkcji o nazwie nazwaFunkcji. Zobacz te przykad przedsta-wiony poniej. Format opisw funkcji jest ujednolicony, tak aby atwo by-o z nich korzysta. Kolejne sekcje pomocy zawieraj: zwizy opis funk-cji (sekcja Description), deklaracje funkcji (sekcja Usage), objanienie po-szczeglnych argumentw (sekcja Arguments), szczegowyopis funkcji (sek-cja Details), literatur (sekcja References), odnoniki do innych funkcji(sekcja See Also) oraz przykady uycia (sekcja Examples). Jeeli poda-my argument package, to uzyskamy pomoc dotyczc wskazanego pakietu.Przykadowo aby wywietli opis pakietu MASS naley uy poleceniahelp(package=MASS).

    Funkcja args("nazwaFunkcji")wywietla list argumentw nazwaFunkcji.

    Funkcje apropos(slowo) i find(slowo) wypisuj list funkcji (oraz obiek-tw), ktre w swojej nazwie maj podcig slowo.

    Funkcja example("nazwaFunkcji") uruchamia skrypt z przykadami dlafunkcji nazwaFunkcji. Dziki przykadom mona szybko zobaczy jak ko-rzysta z danej funkcji, a take jakich wynikw si naley spodziewa. Nadobry pocztek warto sprawdzi wynik polecenia example(plot).

    Funkcja help.search("slowoKluczowe") przeglda opisy funkcji znajduj-cych si w zainstalowanych pakietach i wywietla te funkcje, w ktrych zna-leziono wskazane slowoKluczowe. W tym przypadku slowoKluczowe moeoznacza rwnie kilka sw lub zwrot. W licie wynikw znajduje si rw-nie informacja, w ktrym pakiecie znajduj si znalezione funkcje.

    Poniej przedstawiona jest przykadowa sesja w programie R. Poszukujemy in-formacji o funkcji plot() oraz o funkcjach do testowania hipotez.Wpierwszej liniiwywietlamy pomoc dotyczc funkcji plot(), nastpnie przykady uycia funkcjiplot(). Kolejna linia wywietla funkcje ze sowem "test" w nazwie a ostania wy-wietla nazwy funkcji ze zwrotem "normality test" w opisie.

    ?plotexample(plot)apropos("test")help.search("normality test")

    Funkcje przedstawione powyej wyszukuj informacje na zadany temat wrdpakietw, ktre s ju zainstalowane na komputerze. Jeeli to okae si niewy-starczajce (a moe si zdarzy, e nie mamy zainstalowanego pakietu, w ktrymznajduje si potencjalnie interesujca nas funkcja), to moemy skorzysta z zaso-bw dostpnych w Internecie. W szczeglnoci warto wiedzie gdzie znale:

    Szukajc informacjizwizanych z Rw wyszukiwarkach,warto dowyszukiwanego hasapoza R doda rwnienapis CRAN (eComprehensive RArchive Network).Uatwi to znalezienieinformacji zwizanychz tym znaczeniemliterki R.

    Poradniki (podrczniki, ang. manuals), powicone rnym aspektom pro-gramowania w programie R lub analizy danych w programie R. Dostpne sbezporednio z menu Help w programie R oraz w Internecie pod adresemhttp://cran.r-project.org/manuals.html.

  • 12 agodne wprowadzenie do R

    R-bloggers, czyli agregator blogwpowiconych programowi R, czsto r-do wielu ciekawych informacji http://www.r-bloggers.com.

    Ksiki powicone pakietowi R oraz o analizie danych z uyciem tego pa-kietu. Aktualizowana lista ksiek na ten temat znajduje si online pod ad-resem http://www.r-project.org/doc/bib/R-books.html.

    Portale z pytaniami i odpowiedziami dotyczcymi statystyki, programowa-nia. Np. http://stats.stackexchange.com (pytania dotyczce statystyki)lub http://stackoverflow.com/questions/tagged/r (pytania dotyczceprogramowania).

    FAQ dostpne pod adresem http://cran.r-project.org/faqs.html. Ty-sice lub setki tysicy osb uywa R, wic pewne pytania zostay ju zadanesetki razy. FAQ, to miejsce, w ktrym znajdziesz odpowiedzi na najczstszepytania (std te nazwa FAQ, skrt od ang. Frequently Asked Question).

    Powysze rda s bezwyjtku angielskojzyczne. Poza nimiw Interneciemo-na znale tewielemateriawpolskojzycznych. Jednymzpierwszych jest Wpro-wadzenie do rodowiska R ukasza Komsty [13]. Ostatnio pojawia si coraz wicejpolskojzycznych ksiek dotyczcych wybranych zastosowa pakietu R. W razienapotkania problemw mona zada pytanie na ktrym z polskich forw, na kt-rym wypowiadaj si uytkownicy programu R, np. na googlowej Polskiej grupieuytkownikw programu R [9].

    1.5.3 kalkuRatorProgram R to bardzo potny, zaawansowany i rozbudowany pakiet statystycz-ny. Ale mona te korzysta z niego tak, jak z bardzo rozbudowanego kalkulatora.Zacznijmy od kilku prostych dziaa. Ponisza ramka przedstawia wynik przyka-dowej sesji z R. Po znaku zachty ">" znajduj si wprowadzone polecenia. Naci-nicie klawisza ENTER powoduje zakoczenie linii i (o ile to moliwe) wykonaniepolecenia.

    Poniej przedstawiamy przykadow sesj z pakietem R w roli kalkulatora. Za-cznijmy od kilku prostych operacji arytmetycznych.2+2## [1] 42^10 - 1## [1] 10231 / 5## [1] 0.2(3 + 7)^(4 - 2)## [1] 100log(1024, 2)## [1] 10

    Funkcje trygonometryczne operuj na radianach.sin(pi/2)## [1] 1

  • Startujemy 13

    sin(pi/3)^2 + cos(pi/3)^2## [1] 1atan2(1,1)## [1] 0.7853982

    Co trudniejszego, symbol Newtona, tylko w dobrych kalkulatorach.

    choose(6,2)## [1] 15

    !!

    ! ! ! !!

    Napis [1] rozpoczynajcy lini z wynikiem zwizany jest ze sposo-bem dziaania funkcji print() wywietlajcej obiekty, w tym przy-padku wektory liczb. Mianowicie, jeeli wywietlane s wartociwektora, to w nawiasie kwadratowym znajduje si indeks elementu

    wywietlanego bezporednio za tym nawiasem. Dziki temu jeeli wartoci wek-tora rozpisane s w wielu liniach, to dla kadej linii wiadomo ktry element jestpierwszym wywietlanym. W prezentowanych przypadkach wynikiem jest jednaliczba, ktra jest traktowana przez R jako jednoelementowy wektor. Std napis [1].Do zagadnienia wywietlania wektorw jeszcze wrcimy.

    Jakwida liczenie w programie R to nic trudnego. Do dyspozycjimamywszyst-kie popularne operatory arytmetyczne (ich lista znajduje si w tabeli 1.3). Wyra-enia arytmetyczne mona grupowa wykorzystujc nawiasy (). W programie R

    Mona te grupowawyraeniaarytmetycznenawiasamiklamrowymi {}. Coprawda R inaczejinterpretuje oba typynawiasw, ale efektkocowy bdzie takisam.

    dostpne s rwnie popularne funkcje arytmetyczne (ich lista znajduje si w ta-beli 1.2) oraz najpopularniejsze funkcje trygonometryczne (wymienione w tabeli1.1). Z funkcji tych korzysta si intuicyjnie (patrz przykad powyej). Warto pa-mita, e implementacja tych funkcji czsto jest bardzo zaawansowana po to, bywyniki numeryczne byy wyznaczane z moliwie najwiksz precyzj.

    !!

    ! ! ! !!Warto zwrci uwag na funkcje expm1() i log1p(). Ze wzgldu naograniczon moliwo przechowywania i operowania przez proce-sor na liczbach rzeczywistych, wykonywanie dodawania lub odej-mowania na liczbach rnicych si o kilka lub kilkanacie rz-

    dw prowadzi do sporych bdw numerycznych. Z tego te powodu w praktycz-nie kadym kalkulatorze (i rwnie wwikszoci pakietw statystycznych) wartowyraenia 1-exp(0.1^15) jest wyznaczana z bdem wzgldnym rzdu 10%. Po-dobnie wyraenie log(1+0.1^20) jest wyliczane jako 0 (a wic z bdem wzgld-nym wynoszcym 100%). W tych sytuacjach duo dokadniejsze wyniki bd wy-znaczone, gdy uyjemy funkcji expm1() i log1p().

    1-exp(0.1^15)## [1] -1.110223e-15expm1(0.1^15)## [1] 1e-15log(1+0.1^20)## [1] 0log1p(0.1^20)## [1] 1e-20

  • 14 agodne wprowadzenie do R

    To jeszcze nie koniecmoliwoci kalkuRatora. Dostpnych jest znacznie wicejfunkcji, ktre uciesz kadego inyniera. List bardziej popularnych zamieszczamyw tabeli 1.4.Wybrane bardziej specjalistyczne funkcje w tym: funkcje Bessela, bazywielomianw ortogonalnych itp. zostan opisane w kolejnych rozdziaach.

    T .: Lista funkcji trygonometrycznych z pakietu base

    cos(x)/sin(x) Warto funkcji cosinus/sinus w punkcie x.tan(x) Warto funkcji tangens w punkcie x.acos(x)/asin(x) Warto funkcji arcus cosinus/sinus w punkcie x.atan(x) Warto funkcji arcus tangens w punkcie x.atan2(y, x) Funkcja wyznaczajca kt (w radianach) pomidzy osi OX a wek-

    toremopocztkuwpunkcie (0,0) a kocuwpunkcie (x,y).Wygod-na funkcja do zamiany wsprzdnych w ukadzie kartezjaskich,na wsprzdne w ukadzie biegunowym.

    T .: Lista funkcji arytmetycznych z pakietu base

    round(x) Liczba cakowita najblisza wartoci x.signif(x,k) Warto x zaokrglona do k miejsc znaczcych.floor(x) Podoga, czyli najwiksza liczba cakowita nie wiksza od x.ceiling(x) Su t, czyli najmniejsza liczba cakowita nie mniejsza od x.trunc(x) Warto x po odciciu czci rzeczywistej, dla liczb dodatnich dzia-

    a jak floor(), dla ujemnych jak ceiling.abs(x) Warto bezwzgldna z x.log(x) Logarytm naturalny z x.log(x, base) Logarytm o podstawie base z x.log10(x) Logarytm o podstawie 10 z x.log2(x) Logarytm o podstawie 2 z x.exp(x) Funkcja wykadnicza (eksponenta) z x.expm1(x) Funkcja rwnowana wyraeniu exp(x)-1, ale wyznaczona

    z wiksz dokadnoci dla x|1|.log1p(x) Funkcja rwnowana wyraeniu log(1+x), ale wyznaczona

    z wiksz dokadnoci dla x|1|.sqrt(x) Pierwiastek kwadratowy z x, rwnowane poleceniu x^0.5.

    T .: Lista operatorw arytmetycznych

    - x Zmiana znaku x.x + y (x - y) Suma (rnica) x i y.x * y (x / y) Iloczyn (iloraz) x i y.x ^ y Liczba x do potgi y.x %% y Reszta z dzielenia x przez y (tzw. dzielenie modulo).x %/% y Cz cakowita z dzielenia x przez y.

  • Startujemy 15

    T .: Lista funkcji specjalnych i funkcji do operacji na liczbach zespolonych

    beta(a,b) Warto funkcji B(a, b) o argumentach a i b.lbeta(a,b) Warto logarytmu z funkcji B(a, b).gamma(x) Warto funkcji (x).lgamma(x) Warto logarytmu z funkcji (x).digamma(x) Druga pochodna z logarytmu funkcji (x).trigamma(x) Trzecia pochodna z logarytmu funkcji (x).psigamma(x, deriv) Pochodna rzdu deriv z logarytmu funkcji (x).choose(n,k) Liczba kombinacji k elementowych ze zbioru n ele-

    mentowego.lchoose(n,k) Logarytm z liczby kombinacji k elementowych ze

    zbioru n elementowego.combn(n,k) Listawszystkich kombinacji k elementowych ze zbioru

    n elementowego.factorial(x) Silnia z x.lfactorial(x) Logarytm z silni z x.convolve(x,y) Splot wektorw x i y.complex(real=0,im=0,

    modulus,argument)Konstrukcja liczb zespolonych przez okrelenie czcirzeczywistej i urojonej lub moduu i argumentu.

    as.complex(x, ...) Konwersja x na liczb zespolon.is.complex(x) Test, czy argument x jest liczb zespolon.Re(x) Cz rzeczywista liczby zespolonej x.Im(x) Cz urojona liczby zespolonej x.Mod(x) Modu liczby zespolonej x.Arg(x) Argument liczby zespolonej x.Conj(x) Sprzenie liczby zespolonej x.

    1.5.4 Kilka przykadowych sesji w programie RW dalszej czci tej ksiki na przykadach pokaemy, co mona robi w progra-

    Zakadam, e czytelnikwie, czym s zmiennei do czego si ichuywa. Jeeli nie, tobez wdawania siw szczegy moeprzyj, e zmiennareprezentuje pewnewirtualne, nazwanepudeko, w ktrymmoemyprzechowywawartoci.

    mie R, na jakich obiektach i w jaki sposb mona pracowa oraz jakie efekty mo-na uzyska. W tym podrozdziale nakrelimy wycznie kilka oglnych idei orazpokaemy kilka przykadowych sesji R, tak by atwiej byo przedziera si przezpniejsze, sformalizowane opisy. Aby zdoby biego w programowaniu w pro-gramie R trzeba wiczy i eksperymentowa (tak jak i w nauce kadego jzyka,czy to jzyka programowania czy jzyka naturalnego). Dlatego po przeczytaniu te-go podrozdziau warto sprbowa samodzielnie napisa kilka programw w pro-gramie R. Osoby nie lubice uczenia si na przykadach powinny ten podrozdziaomin i przej do kolejnego.

    Przykady rozpocznijmy od operacji na zmiennych.Ponisze przykady war-to samodzielnie uruchomi w programie R. W tym celu naley wpisa zawartowszystkich linijek nierozpoczynajcych si od znaku komentarza #.

    Przypisa warto dozmiennej mona ioperatorem =i operatorem

  • 16 agodne wprowadzenie do R

    Teraz moemy wykona operacje na tych zmiennych.

    a + b## [1] 8

    Jeeli nie wiemy, dlaczego na ekranie pojawia si cyfra 8, to naley rozpoczlektur tego rozdziau od pocztku. Wykonajmy bardziej zaawansowan operacji wynik przypiszmy do zmiennej c.

    c

  • Startujemy 17

    Moemy te operowa na liczbach zespolonych (jednak trzeba to robi z uwa-g, patrz poniszy przykad). Lista funkcji do operowania na liczbach zespolonychumieszczona jest w tabeli 1.4.

    Jeeli nie wiemy, co toliczby zespolone, topomijamy tenprzykad.sqrt(-17)

    ## [1] NaN## Warning message:## In sqrt(-17) : NaNs produced

    Nie tak miao by, jeeli chcemy korzysta z arytmetyki na liczbach zespolonych,trzeba to jawnie okreli.sqrt(-17+0i)## [1] 0+4.123106i(2+4i)*(3-2i)## [1] 14+8i

    A teraz skonstruujemy wektor liczb korzystajc z funkcji c() i wykonamy na nimkilka operacji. Przeledmy poniszy przykad.

    Funkcja c() jestbardzo czstowykorzystywana dotworzenia wektorwliczb, napisw,wartoci logicznych.Skleja ze sob wartocipodane jako jejargumenty.

    (wektor

  • 18 agodne wprowadzenie do R

    wektora. Poniej kilka przykadw jak to zrobi. Wicej o tym, jak korzysta z ele-mentw wektora bdzie w nastpnym podrozdziale.

    Co jest w pierwszym elemencie wektora wektor? A co jest w jego drugim i trze-cim elemencie?

    wektor[1]## [1] 11wektor[2:3]## [1] 13.0 10.5

    Fragment wektora te jest wektorem moemy wic na nim swobodnie wykonywadowolne operacje.

    wektor[2:3] + 4## [1] 17.0 14.5

    Co jest w elemencie 1, 3 i 5.

    wektor[c(1,3,5)]## [1] 11.0 10.5 11.0

    Wypiszmy wartoci dodatnie z wektora (wartoci o indeksach odpowiadajcymwartociom dodatnim).

    wektor[wektor>0]## [1] 11.0 13.0 10.5 11.0

    Struktur bardziej zoon od wektora jest macierz. W poniszym przykadziezadeklarujemy macierz o wymiarach 2 3 i wykonamy na niej kilka operacji aryt-metycznych. Zacznijmy od stworzenia macierzy zoonej z samych zer.

    macierz

  • Startujemy 19

    A teraz drugi wiersz.macierz[2,]## [1] 2 4 6

    Z algebry znamy ciekawsze operacje na macierzach. Zobaczmy wic, jak mno-y macierze, jak liczy ich wyznaczniki, odwrotnoci i iloczyny. Zacznijmy odzde niowania dwch macierzy o wymiarach 2x2.(A

  • 20 agodne wprowadzenie do R

    1.5.5 Podstawy skadni jzyka RPoniej przedstawimy podstawy skadni jzyka R. Wprowadzimy te takie pojciajak typ, obiekt, konwersja itp. Opanowanie tych poj i poniej opisanych infor-macji jest niezbdne, by mc sprawnie porusza si po kolejnych rozdziaach.

    1.5.5.1 Obiekty

    Praktyczniewszystko z czymmamydo czynieniaw jzykuR jest obiektem.Obiekty

    Obiektowow programie R jest

    inna ni obiektowoznana z Javy czy

    Smalltalka. Wicejuwagi temu tematowi

    powicimyw kolejnym rozdziale.

    mona podzieli (nie wdajc si w formalne szczegy) na kilka typw (rodzajw)przedstawionych poniej:

    Nie jest to kompletnezestawienie, pomijamytutaj rzadko uywane

    niskopoziomowekonstrukcje, peny opis

    znale monaw dokumencie [45]

    Typ liczbowy. Obiekty tego typu przechowuj liczby, zarwno cakowite jaki rzeczywiste. Wpisujc liczby dozwolona jest notacja naukowa (np. 2.5e3oznacza 2500). Kropk dziesitn w programie R jest kropka. Wyrnionwartoci jest NaN (to skrt rozwijajcy si w ang. not a number, czyli nieliczba). Ta warto moe pojawi si w wyniku wykonania niepoprawne-go dziaania (np. prby logarytmowania liczby ujemnej). Literay Inf i -Infoznaczaj plus i minus nieskoczono.1## [1] 11.5## [1] 1.51.5e5## [1] 150000

    Typczynnikowy (nazywany rwniewyliczeniowym lubkategorycznym).Ten typ jest przydatny do przechowywania wektorw wartoci wystpuj-

    W tej ksice bdziemykorzysta przemiennie

    z rnych nazw dlatypu czynnikowego,

    zdajc sobie spraw, eprzez rne grupy

    uytkownikw jest onrnie nazywany.

    Programicijzykw typu C++

    i niszego poziomu,przyzwyczajeni s do

    nazwy typwyliczeniowy. Nazwa

    typ kategorycznybierze si z nazywania

    moliwych wartocizmiennej danego typu

    kategoriami. Nazwatyp czynnikowy jestnajczciej uywanawrd statystykw,

    gdzie moliwewartoci odpowiadaj

    rnym poziomompewnego czynnika.

    cych na kilku poziomach (w kilku kategoriach). Przykadowo pe wystpu-je na dwch poziomach, tzn. moe przyjmowa tylko dwie wartoci, dlate-go przechowujc w programie R wektor danych opisujcych pe, najlepiejuy typu czynnikowego. Zmienne tego typu s najczciej wykorzystywanedo de niowania grup. Zmienne typu czynikowego zajmuj mniej miejscaw pamici ni odpowiadajce im acuchy znakw. Wewntrznie takie wek-tory przechowywane s jako wektory liczb przez co mona na nich szybciejwykonywa okrelone funkcje. Gdy moemy, warto uywa tego typu dlapoprawienia efektywnoci. Ponadto wiele funkcji programu R (szczeglniestatystycznych) jest w stanie rozpozna, e argument jest typuwyliczeniowe-go i zastosowa odpowiednie dziaania, np. wyznaczy liczebnoci poszcze-glnych grup, zastosowa kodowanie z uyciem zmiennych pustych itp.Zazwyczaj zmienne tego typu tworzy si z uyciem funkcji factor(). Na po-niszymprzykadzie konstruujemy czteroelementowywektor elementw ty-pu wyliczeniowego, ze sownikiem skadajcym si z dwch wartoci.(nz

  • Startujemy 21

    summary(nz)## kapitan sierzant## 1 3

    Typ znakowy.Wartociami obiektw tego typu s napisy (bdziemy te uy-wa nazwy acuchy znakw). W programie R napisy rozpoczynane s zna-kiem ' lub " oraz koczone takim samymznakiem.W acuchu znakwmo-g wystpowa dowolne znaki w tym znaki specjalne rozpoczynajce si odznaku \. Wybrane znaki specjalne to: \n znak nowej linii, \t znak tabu-lacji, \\ oznaczajcy znak \, znak \" oznaczajcy ", itp.Z acuchw znakw mona wycina fragmenty, skleja, wyszukiwa pod-cigi znakw i wykonywa wiele innych operacji, o ktrych napiszemyw ko-lejnych podrozdziaach."To jest napis"## [1] "To jest napis"'To tez jest napis'## [1] "To tez jest napis""To jest napis 'a to jest napis wewnetrzny'"## [1] "To jest napis 'a to jest napis wewnetrzny'"

    Funkcja cat() wywietla napis w sposb niesformatowany.cat(" co \t to \\ teraz\"\n\n bedzie?")## co to \ teraz"#### bedzie?

    Napisy mona skleja.paste("Napis", "napis doklejony", 12)## [1] "Napis napis doklejony 12"

    Typ logiczny. Obiekty tego typu przechowuj jedn z dwch wartoci, lo-giczn prawd (oznaczan przez litera TRUE lub jego skrt T) albo logicz-ny fasz (oznaczany przez litera FALSE lub jego skrt F). Na tych obiektach

    Literay TRUE i FALSEto sowa zastrzeone,ich wartoci nie mogby zmody kowane.Natomiast T i F tozwyke zmienne,ktrych wartomona dowolniemody kowa.

    mona wykonywa operacje logiczne oraz arytmetyczne (o tym w kolejnychpodrozdziaach).Jeeli wartoci logiczne znajd si w wyraeniu arytmetycznym, to zostanskonwertowane na liczby, odpowiednio, 1 i 0.TRUE## [1] TRUET## [1] TRUE

    Testowanie rwnoci.1==2## [1] FALSE2==2## [1] TRUE

  • 22 agodne wprowadzenie do R

    Wyraenie arytmetyczne, nastpuje automatyczna konwersja wartoci typulogicznego na liczb.(2==2) + 2## [1] 3

    Wyraenie logiczne, w uyciu operatory sumy logicznej i negacji.(1==0) | !(1==0)## [1] TRUE

    Wektor elementw. Wektor to uporzdkowany zbir obiektw tego samegotypu. Do tworzenia wektora z pojedynczych elementw lub innych wekto-rw suy funkcja c(). W programie R nie ma rozrnienia na pojedyncz

    I dont like to see theuse of c() for its sideeffects. In this case

    Marcs as.vector seemsto me to be

    self-explanatory, andthat is a virtue in

    programming that istoo oen undervalued.

    Brian D. Ripley (onhow to convert

    a matrix into a vector)fortune(185)

    warto i wektor, pojedyncze wartoci traktowane s jako jednoelemento-we wektory. Poniej przedstawiamy konstrukcje wektora skadajcego siz trzech liczb oraz wektora sekwencji 30 liczb. Tak dugie wektory wywie-tlane s w kilku wierszach. Kolejne wiersze rozpoczynaj si od, otoczone-go nawiasami kwadratowymi, indeksu pierwszego elementu wywietlonegow danej linii.c(1, 3, 4)## [1] 1 3 4(1:30)*2## [1] 2 4 6 8 10 12 14 16 18 20## [11] 22 24 26 28 30 32 34 36 38 40## [21] 42 44 46 48 50 52 54 56 58 60

    Elementy wektora mog mie nazwy.c(pierwszy = 12, drugi = 10, trzeci = 18)## pierwszy drugi trzeci## 12 10 18

    Poniewa analizujc dane czsto okrelone transformacje wykonuje si nawszystkich elementach wektora, dlatego te jzyk R zosta tak zaprojektowa-ny, by operacje na wektorach byy moliwie najefektywniejsze. Jeeli chcemydoda dwawektory do siebie wystarczy uy operatora +. Dodawanie wekto-rw za pomoc ptli, dodajcej element po elemencie bdzie znacznie mniejefektywne.Wszystkie elementywektoramuszmie ten sam typ.Wyjtkiem jest umiesz-czanie w wektorze dowolnego typu wartoci NA (ang. not avaliable) oznacza-jcej brak wartoci. Wykonywanie dziaa arytmetycznych na wartoci NAdaje w wyniku rwnie warto NA. Niektre funkcje maj moliwo poda-nia argumentu na.rm, ktry ustawiony na TRUE wymusza usuwanie braku-jcych obserwacji przed kontynuowaniem oblicze.Funkcja mean() liczy redni arytmetyczn, ale coma zrobi z brakujc ob-serwacj?wektor

  • Startujemy 23

    Dodanie argumentu na.rm=TRUE rozwizuje problem.mean(wektor, na.rm=TRUE)## [1] 23.5

    Jeeli chcemy usun z wektora wartoci brakujce, to moemy posuy sifunkcj na.omit() (jej wynikiem jestwektor bez elementwNA) lub funkcjcomplete.cases() (jej wynikiem jest wektor wartoci logicznych, TRUE gdynie ma NA lub FALSE gdy jest). Argumentami obu funkcji mog by wektory,macierze lub ramki danych. Jeeli argumentem jest ramka danych, to funk-cja na.omit() usunie cay wiersz, w ktrym znajduj si brakujce obserwa-cje, a funkcja complete.cases() okreli dla kadego wiersza, czy znajdujsi w nim brakujce obserwacje. Zwizana z wartociami brakujcymi jestrwnie funkcja na.fail() generujca bd, jeeli w argumencie tej funkcjiznajduj si brakujce obserwacje.

    Lista. Podobnie jak wektor, lista to rwnie uporzdkowany zbir elemen-tw. W przeciwiestwie do wektora, elementy listy mog mie rne typy.Podobnie jak w przypadku wektora poszczeglne elementy mog mie na-zwy. Listy tworzy si zazwyczaj z uyciem funkcji list(). Do elementw li-sty moemy si odwoywa jak do elementw wektora, korzystajc z nazwposzczeglnych pl lub z operatora [[]]. W poniszym przykadzie kon-struujemy list czterech obiektw rnych typw.list(imie=c("Jan","Tomasz"), nazwisko="Kowalski", wiek=25,

    czyWZwiazku=T)## $imie## [1] "Jan" "Tomasz"#### $nazwisko## [1] "Kowalski"#### $wiek## [1] 25#### $czyWZwiazku## [1] TRUE

    Macierz. Macierze tworzy si zazwyczaj funkcj matrix(). Parametrami tejfunkcji jest wektor inicjujcy zawarto macierzy oraz dwie liczby okrelaj-ce wymiarymacierzy.Macierzmoe skada si z liczb, napisw lub wartocilogicznych. W poniszym przykadzie konstruujemy macierz o wymiarach4x2 wypenion zerami.matrix(0,2,4)## [,1] [,2] [,3] [,4]## [1,] 0 0 0 0## [2,] 0 0 0 0

    Funkcj array() mona konstruowa macierze o wikszej liczbie wymia-rw. Ten temat poruszymy w kolejnych podrozdziaach.

  • 24 agodne wprowadzenie do R

    Ramka danych. Szczeglnym typem jest ramka danych, nazywana rwnietabel danych. Ramka danych jest zazwyczaj kojarzona z macierzow/tabe-laryczn struktur, ktrej elementy w kadej kolumnie s tego samego typu,ale mog rni si typami pomidzy kolumnami. Z tego powodu ramk da-nych mona traktowa jak list wektorw o tej samej dugoci, kady wektorodpowiada jednej kolumnie.Ramki danych tworzy si zazwyczaj funkcj data.frame(). Poniej konstru-ujemy ramk danych skadajc si z trzech trzyelementowych zmiennych.Konstruujemy ramk danych podajc wartoci dla kadej z kolumn.(ramka

  • Startujemy 25

    T .: Funkcje pozwalajce na sprawdzenie lub konwersj typu zmiennej

    is.numeric() Test czy argument jest liczb.is.integer() Test czy argument jest liczb cakowit.is.double() Test czy argument jest liczb rzeczywist.is.complex() Test czy argument jest liczb zespolon.is.logical() Test czy argument jest wartoci logiczn.is.character() Test czy argument jest znakiem lub napisem.is.factor() Test czy argument jest typu wyliczeniowego.is.na() Test czy argument jest wart. nieokrelon (NA).is.nan() Test czy argument jest niewaciw liczb (NaN).as.numeric() Konwersja na warto liczbow.as.integer() Konwersja na warto cakowitoliczbow.as.double() Konwersja na warto rzeczywist.as.complex() Konwersja do liczby zespolonej.as.logical() Konwersja na warto logiczn.as.character() Konwersja na typ znakowy.as.factor() Konwersja na typ wyliczeniowy.as.list() Konwersja do listy.unlist() Konwersja z listy do wektora.as.matrix() Konwersja na macierz.as.data.frame() Konwersja na ramk danych.class(), mode() Odczytanie klasy / typu argumentu.

    (wektor

  • 26 agodne wprowadzenie do R

    Tryb przechowywania elementw wektora to tryb liczbowy.

    mode(wektor)## [1] "numeric"is.numeric(wektor)## [1] TRUE

    Ten wektor nie jest wektorem znakw.

    is.character(wektor)## [1] FALSE

    I adna z jego wartoci nie jest NA.

    is.na(wektor)## [1] FALSE FALSE FALSE FALSE FALSE FALSE

    !!

    ! ! ! !!

    Klas obiektu widzian przez funkcj class() mona dowolniezmienia, moemy do obiektu przypisywa wiele klas o dowolnychnazwach, o czym jeszcze napiszemy wicej w kolejnych rozdzia-ach. Funkcja mode() informuje o wewntrznej reprezentacji danej

    zmiennej i nie moemy na wynik tej funkcji bezporednio wpywa. Wicej o obutych funkcjach przeczyta mona w podrozdziale 2.1.7.

    1.5.5.3 Zmienne

    Zmienne su do przechowywania wprowadzonych danych lub wynikw wyko-nanych polece. Najczciej te wartoci chcemy przechowa, aby mc je pniejponownie wykorzysta. Do wartoci zmiennych odwoujemy si podajc nazwzmiennej. Nazwa zmiennej powinna rozpoczyna si liter, moe skada si z liter,cyfr i kropek. Istotna jest wielko liter, wic zmienne x i X to dwie rne zmienne.

    Do zmiennej mona przypisa warto dowolnym z nastpujcych operato-rw przypisania (jeszcze inne, mniej popularne sposoby, s opisane na kocu tegopodrozdziau):

    operator =, przypisuje warto znajdujc si z prawej strony do zmiennejznajdujcej si po lewej stronie,

    operator , przypisuje warto znajdujc si z lewej strony do zmiennejznajdujcej si po prawej stronie.

    Warto do zmiennej mona te przypisa funkcj assign(), ale korzystanie z po-wyszych operatorw jestwygodniejsze. Poniej przedstawiamy rne sposoby przy-pisywania wartoci do zmiennych.

    c(13, 13) -> zmienna.z.kropkaimieN

  • Startujemy 27

    Do przypisania wartoci mona uywa rwnie operatorw ->> i

  • 28 agodne wprowadzenie do R

    1.5.5.4 Indeksy

    Do elementw skadowych wektorw, list, macierzy i ramek danych moemy siodwoywa na rne sposoby. Przedstawiamy te sposoby poniej, wraz z krtkimopisem. Wicej szczegowych informacji znale mona wpisujc w programie Rpolecenie ?Extract.

    W notacji wektorowej: zmienna[zakres].W tym przypadku zmienna jest list, wektorem,macierz lub ramk danych,zakres jest wektorem liczb cakowitych lub jedn liczb cakowit. Wyni-kiem jest lista(wektor) zawierajca wybrane elementy.W przypadku indeksowania list, ramek danych lub wektorw z nazwanymielementami,moemywnawiasach []podawektor nazw elementw.W tymprzypadku wybrane zostan elementy o nazwach wskazanych przez wektorindekswnazw.Jeeli zakres jest wektorem liczb ujemnych, to zwrcone bd wszystkie ele-menty z listy(wektora) poza wskazanymi pozycjami. Nie mona w zakresmiesza indeksw dodatnich i ujemnych.wektor

  • Startujemy 29

    Tylko elementy poza pierwszym wierszem i pierwsz kolumn.macierz[-1,-1]## [1] 4

    Domylnie, jeeli wynikiem ma by pojedynczy wiersz lub kolumna, to gu-biony jest wymiarmacierzy, wynik staje si wtedy wektorem a niemacierz.Jeeli chcemy zagwarantowa, e wynik bdzie macierz, chociaby po to byodwoywa si do jej wartoci jak do elementw macierzy, to przy indekso-waniu naley doda argument drop=TRUE. Poniej przedstawiamy przykadilustrujcy t rnic.

    Tak, to kolejnyprzykad, e operatorindeksowania jestw rzeczywistocifunkcj, a drop jestjednym z jejargumentw. Ale dlaczytelnoci traktujemyoperator indeksowaniaw sposb specjalny

    Wynik poniszych instrukcji jest wektoremmacierz[1,]## [1] 1 3macierz[1,,drop=TRUE]## [1] 1 3

    Ale tej jest ju macierz.macierz[1,,drop=FALSE]## [,1] [,2]## [1,] 1 3

    W notacji listowej: zmienna$wartosc1W tym przykadzie zmienna to lista, wektor lub ramka danych. Wynikiemzastosowania tego operatora jest element listy/wektora (lub kolumna z ramkidanych) o nazwie wartosc1.osobnik

  • 30 agodne wprowadzenie do R

    Pierwszy element listy, wektor dwuelementowy.osobnik

  • Startujemy 31

    wektor

  • 32 agodne wprowadzenie do R

    T .: Lista operatorw logicznych i arytmetycznych

    +, - , *, /, ^ Operatory dwuargumentowe. Oba argumenty powinny mie taki samwymiar lub jeden powinien by wielokrotnoci drugiego.

    %x%, %*% Iloczyn Kroneckera i iloczyn macierzowy dwch macierzy.%%, %/% Reszta modulo z dzielenia i dzielenie cakowite., = Standardowe operatory porwnywania wartoci liczbowych.!, != Operator negacji logicznej i nierwnoci.&, &&, |, || Logiczny iloczyn oraz logiczna suma.any(), all() Logiczna suma(iloczyn) wszystkich elementw wektora.

    A teraz logiczne i dla wszystkich elementw obu wektorw.lubie.statystyke && lubie.prowadzacego## [1] FALSE

    I jeszcze logiczne lub dla kolejnych par elementw obu wektorw.lubie.statystyke | lubie.prowadzacego## ala ola ewa## TRUE TRUE TRUE

    Teraz logiczne lub dla wszystkich elementw obu wektorw.lubie.statystyke || lubie.prowadzacego## [1] TRUEany(lubie.statystyke)## [1] TRUE

    !!

    ! ! ! !!

    Pomidzy operatorami || (&&) a | (&) istnieje jeszcze jedna rni-ca. Operatory | i & zachowuj si jakby stosoway tak zwane gorli-we wartociowanie, czyli wyznaczaj wartoci wszystkich argumen-tw tych operatorw a nastpnie wyznaczaj logiczn sum lub ilo-

    czyn. Operatory || i && zachowuj si, jakby stosoway tak zwane leniwe warto-ciowanie, czyli wyznaczaj warto drugiego argumentu, tylko jeeli jest ona nie-zbdna do okrelenia wartoci wyniku. W sytuacji, gdy pierwszy argument ope-ratora || ma warto TRUE (a dla operatora && warto FALSE) nie jest wyliczanydrugi argument, poniewa wynik operatora jest ju znany. Warto pamita o tychrnicach, czsto s one rdem bdw trudnych do wykrycia.

    wypiszNaEkran

  • Startujemy 33

    1.5.5.6 Sekwencje

    Sekwencje to wektory liczb cakowitych, takie e dwie ssiednie wartoci s od-dalone o t sam warto, najczciej o jeden. Takie wektory mona generowauywajc operatora : lub funkcji seq(). Kilka sposobw generowania sekwencjiprzedstawimy poniej.

    Operator :, generuje sekwencj liczb od ... od ... z krokiem 1.-2:2## [1] -2 -1 0 1 22:-2## [1] 2 1 0 -1 -2

    Ponisze wywoanie funkcji seq() rwnowane jest wywoaniu 1:10.seq(10)## [1] 1 2 3 4 5 6 7 8 9 10

    Podajemy zakres wektora, rwnowane z uyciem 10:25.seq(10, 25)## [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

    Dodatkowo okrelamy krok, czyli o ile zwikszane s kolejne wartoci.seq(10,25,by=10)## [1] 10 20

    Moemy te okreli podan dugo wektora, funkcja seq() sama zatroszczysi o wybr kroku.seq(10, 25, length.out=10)## [1] 10.00000 11.66667 13.33333 15.00000 16.66667 18.33333 20.00000## [8] 21.66667 23.33333 25.00000

    Przydatn funkcj do operowania na sekwencjach liczb (a take na zwykychwektorach) jest funkcja sample(). Losuje ona k-elementowy podzbir (k to drugiargument tej funkcji) z wektora danego jako pierwszy argument tej funkcji. Mo-na losowa elementy ze zwracaniem (gdy trzeci argument replace=TRUE) lub bezzwracania (gdy argument replace=FALSE, ustawienie domylne).Mona te wska-za wektor prawdopodobiestw (argument prob) okrelajcy prawdopodobie-stwa wylosowania poszczeglnych elementw wektora. W poniszym przykadzielosowany jest dziesicioelementowy wektor liter.Wykorzystano w tym przykadzieprede niowany wektor letters, czyli wektor maych liter z alfabetu aciskiego(inne ciekawe prede niowane wektory to LETTERS due litery, month.name na-zwy miesicy i month.abb trzyliterowe skrty nazw miesicy).

    Wylosujmy dziesi liter (losujemy z powtrzeniami).sample(letters, 10, TRUE)## [1] "u" "q" "x" "s" "q" "f" "c" "f" "l" "x"

    Wylosujmy wektor ze zbioru liczb cakowitych od 1 do 3, losujc z zadanymiprawdopodobiestwami.sample(1:3, 20, TRUE, prob=c(0.6,0.3,0.1))## [1] 2 3 1 1 3 3 1 1 1 1 1 2 1 1 1 2 1 1 2 2

  • 34 agodne wprowadzenie do R

    1.5.5.7 Komentarze

    Jzyk R, jak kady przyzwoity (i wiele nieprzyzwoitych) jzykw programowania,umoliwia komentowanie fragmentw kodu. Znakiem rozpoczcia komentarzajest #. Analizujc skrypt R interpreter ignoruje ten znak i wszystkie po nim wy-stpujce a do znaku nowej linii (czyli do koca linii).

    1.5.6 Wywietlanie i formatowanie obiektw

    Dwie funkcje wykorzystywane do wywietlania obiektw to: cat() i print().Obie wywietlaj warto obiektu, ale kada w odmienny sposb. Aby je porw-na zacznijmy od przykadu, w ktrym wywietlimy wektor szeciu napisw.

    nap

  • Startujemy 35

    si automatycznie, jeeli wynik nie jest do czego przypisany). Mona temu zapo-biec korzystajc z funkcji invisible(). Dziaanie tej funkcji polega na tymczaso-wemu zapobiegniciu wywietlania jej argumentu w sytuacji, gdy nie bdzie on doniczego przypisany.

    Przeledmy poniszy przykad. De niujemy i wywoujemy dwie funkcje, obies tosamociami. Wyniki obu funkcji przypisujemy do zmiennych.I1

  • 36 agodne wprowadzenie do R

    Wynikiem sklejenia dwch wektorw bdzie wektor.paste(1:5, letters[1:5], sep=" * ")## [1] "1 * a" "2 * b" "3 * c" "4 * d" "5 * e"

    Chyba, e okrelimy argument collapse, co spowoduje, e elementy tego wektorazostan poczone.paste(1:5, letters[1:5], sep=",", collapse="; ")## [1] "1,a; 2,b; 3,c; 4,d; 5,e"

    Funkcja format() suy do konwersji danego obiektu na typ znakowy zgodniez ustalonym for