Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00261 006969 15921710 na godz. na dobę w sumie
Programowanie w języku R. - ebook/pdf
Programowanie w języku R. - ebook/pdf
Autor: Liczba stron:
Wydawca: Wydawnictwo Naukowe PWN Język publikacji: polski
ISBN: 978-83-011-8939-6 Data wydania:
Lektor:
Kategoria: ebooki >> poradniki >> zdrowie
Porównaj ceny (książka, ebook, audiobook).

Otwarte i wolno dostępne środowisko R zyskało w ostatnich latach ogromną popularność. Język R jest jednym z podstawowych narzędzi w warsztacie wielu analityków danych, statystyków, /data scientists/, badaczy opinii i rynku, specjalistów /business intelligence/ czy naukowców.
Książka skupia się na dogłębnym wyjaśnieniu zasad funkcjonowania środowiska R. Nie można jej jednak nazwać po prostu kursem programowania. Jest tak dlatego, że R jest ściśle związany z bogatymi obszarami swoich zastosowań. Czytelnik dowie się więc, w jaki sposób przeprowadzać w R obliczenia symulacyjne i numeryczne, jak implementować algorytmy przetwarzania danych, pobierać, tworzyć i przygotowywać zbiory danych do analizy, automatyzować bardzo żmudne - gdyby je wykonywać ręcznie – zadania czy też tworzyć raporty, tabele i wykresy.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Marek Gągolewski W Y DA N I E I I POSZERZONE Programowanie w języku R Analiza danych, obliczenia, symulacje Programowanie w języku R Analiza danych, obliczenia, symulacje Otwarte i wolnodostępne środowisko R zyskało w ostatnich latach ogromną popularność. Język R jest jednym z podstawowych narzędzi w warsztacie wielu analityków danych, statystyków, data scientists, badaczy opinii i rynku, specjalistów business intelligence czy naukowców. Większość publikacji dostępnych na polskim i zagranicznym rynku wydawniczym skupia się na omawianiu sposobów wykorzystywania środowiska R w różnych zastosowaniach praktycznych, m.in. w ekonomii, medycynie, bioinformatyce, psychologii, socjologii oraz naukach technicznych. Objaśnia zatem sposób korzystania z szablonowych rozwiązań na zasadzie „kucharskich przepisów”. Ta oto książka stawia sobie jednak za cel wsparcie Czytelnika w jego drodze ku programistycznej samodzielności – aby mógł wyjść poza gotowe schematy i śmiało mierzyć się z nowymi wyzwaniami, przed jakimi stawia nas tzw. era informacji. Książka skupia się na dogłębnym wyjaśnieniu zasad funkcjonowania środowiska R. Nie można jej jednak nazwać po prostu kursem programowania, a to dlatego, że R jest ściśle związany z bogatymi obszarami swoich zastosowań. Czytelnik dowie się więc, w jaki sposób przeprowadzać w R obliczenia symulacyjne i numeryczne, jak implemento- wać algorytmy przetwarzania danych, pobierać, tworzyć i przygotowywać zbiory danych do analizy, automatyzować bardzo żmudne – gdyby je wykonywać ręcznie – zadania czy też tworzyć raporty, tabele i wykresy. Dr inż. Marek Gągolewski jest adiunktem w Instytucie Badań Systemowych Polskiej Akademii Nauk oraz na Wydziale Matematyki i Nauk Informacyjnych Politechniki War- szawskiej. Jest autorem ponad 50 publikacji naukowych, m.in. na temat agregacji i analizy danych, oraz laureatem stypendiów dla wybitnych młodych uczonych. Pracuje w R od kilkunastu lat, a jego pakiet stringi należy aktualnie do pierwszej dziesiątki najczęściej pobieranych rozszerzeń dla tego języka. M a r e k G ą g o e w s k l i w j ę z y k u R P r o g r a m o w a n e i A n a l i z a d a n y c h , o b l i c z e n a i , s y m u a c e l j Programowanie w języku R Marek Gągolewski Programowanie w języku R Analiza danych, obliczenia, symulacje Projekt okładki Hubert Zacharski Ilustracja na okładce shutterstock/antishock Wydawca Łukasz Łopusza´nski Redaktor prowadz ˛acy Iwona Lewandowska Redaktor Ewa Ławrynowicz Koordynator produkcji Anna B ˛aczkowska Skład i łamanie FixPoint, Warszawa Zastrze˙zonych nazw firm i produktów u˙zyto w ksi ˛a˙zce wył ˛acznie w celu identyfikacji. Copyright © by Wydawnictwo Naukowe PWN SA Warszawa 2014, 2016 ISBN 978-83-01-18939-6 Wydanie II Warszawa 2016 Wydawnictwo Naukowe PWN SA 02-460 Warszawa, ul. Gottlieba Daimlera 2 tel. 22 69 54 321, faks 22 69 54 288 infolinia 801 33 33 88 e-mail: pwn@pwn.com.pl; reklama@pwn.pl www.pwn.pl Druk i oprawa: OSDW Azymut Sp. z o.o. SPIS TREŚCI Przedmowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIII I Podstawy 1. ´Srodowisko R i program RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1. Cechy j˛ezyka i ´srodowiska R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Organizacja pracy w R i RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1. Konsola R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2. Program RStudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3. Pierwsze kroki w trybie interaktywnym . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.4. Edytor skryptów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.5. System pomocy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Typy atomowe: wektory i NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. Klasyfikacja typów obiektów w j˛ezyku R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Wektory atomowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1. Wektory warto´sci logicznych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2. Wektory liczbowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.3. Wektory napisów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.4. Pozostałe typy wektorów atomowych i ich hierarchia . . . . . . . . . . . . . . . . . . 2.3. Tworzenie obiektów nazwanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4. Braki danych, warto´sci niesko´nczone i nie-liczby . . . . . . . . . . . . . . . . . . . . . . . . . 2.5. Typ pusty (NULL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Operacje na wektorach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1. Podstawowe operatory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Operatory arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2. Operatory logiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3. Operatory relacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.4. Priorytety operatorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Indeksowanie wektorów. Filtrowanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1. Rodzaje indeksatorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2. Modyfikowanie wybranych elementów . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. Przegl ˛ad funkcji wbudowanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1. Zwektoryzowane funkcje matematyczne . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. 3 3 4 5 6 8 10 11 13 13 14 14 17 18 19 25 29 31 34 34 35 38 39 41 42 43 45 46 46 VI SPIS TREŚCI 3.3.2. Agregacja danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3. Operacje na s ˛asiaduj ˛acych elementach wektorów . . . . . . . . . . . . . . . . . . . . 3.3.4. Wyszukiwanie indeksów i wybór elementów wektorów . . . . . . . . . . . . . . . . 3.3.5. Operacje oparte na permutowaniu elementów wektorów . . . . . . . . . . . . . . . . 3.3.6. Operacje na zbiorach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.7. Podstawowe operacje na napisach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Listy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1. Tworzenie list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Indeksowanie list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. 4.2.1. Operator „[” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2. Operator „[[” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.3. Modyfikowanie zawarto´sci list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Wybrane operacje na listach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1. Ł ˛aczenie, rozwijanie i powielanie list . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2. Wywoływanie funkcji na wszystkich elementach listy . . . . . . . . . . . . . . . . . 5. Funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1. Tworzenie obiektów typu funkcja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1. Bloki wyra˙ze´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.2. Sprawdzanie poprawno´sci argumentów . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.3. Kilka uwag dla projektantów funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.4. Biblioteki funkcji w plikach .R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.5. Odwoływanie si˛e do funkcji z pakietów R . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Zasi˛eg nazw w funkcjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3. Parametry i argumenty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1. Przekazywanie argumentów przez warto´s´c . . . . . . . . . . . . . . . . . . . . . . . . 5.3.2. Parametry z argumentami domy´slnymi . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.3. Parametr specjalny „...” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 54 55 57 59 60 63 63 66 66 66 67 70 70 73 78 79 81 84 87 88 89 90 92 92 93 94 6. Atrybuty obiektów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.1. Nadawanie i odczytywanie atrybutów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.2. Atrybuty specjalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.2.1. Atrybut comment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.2.2. Atrybut names. Wektory z etykietami . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.2.3. Atrybut class. Wst˛ep do programowania obiektowego S3 . . . . . . . . . . . . . . 106 6.3. O zachowywaniu i gubieniu atrybutów przez funkcje . . . . . . . . . . . . . . . . . . . . . . . 111 7. Typy zło˙zone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.1. Macierze i tablice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.1.1. Tworzenie macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 7.1.2. Indeksowanie macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 7.1.3. Tablice jako uogólnienie macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 7.1.4. Atrybut dimnames. Etykietowanie wierszy i kolumn . . . . . . . . . . . . . . . . . . 121 7.1.5. Reprezentacja macierzy i tablic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 7.1.6. Wybrane operacje na macierzach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.2. Szeregi czasowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.3. Czynniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 7.3.1. Tworzenie czynników . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 SPIS TREŚCI VII 7.3.2. Reprezentacja czynników . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 7.3.3. Czynniki a wektory napisów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 7.3.4. Wybrane operacje na czynnikach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 7.4. Ramki danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 7.4.1. Reprezentacja ramek danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 7.4.2. Operatory indeksowania. Filtrowanie danych . . . . . . . . . . . . . . . . . . . . . . . 141 7.4.3. Wybrane operacje na ramkach danych . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 8. Piel˛egnowanie kodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 8.1. Organizacja kodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 8.1.1. Projekty i skrypty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 8.1.2. Tworzenie własnych pakietów R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 8.2. Obsługa wyj ˛atków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.2.1. Rodzaje wyj ˛atków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 8.2.2. Obsługa komunikatów diagnostycznych i ostrze˙ze´n . . . . . . . . . . . . . . . . . . . 160 8.2.3. Obsługa bł˛edów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 8.3. Testowanie oprogramowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 8.4. Debugowanie kodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 8.5. Pomiar i poprawa wydajno´sci kodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 8.5.1. Badanie krótkich fragmentów kodu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 8.5.2. Profilowanie aplikacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 8.5.3. Zło˙zono´s´c czasowa i pami˛eciowa algorytmów . . . . . . . . . . . . . . . . . . . . . . 171 9. Modyfikacja przepływu sterowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 9.1. Wyra˙zenia warunkowe if i if...else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 9.1.1. Okre´slanie testowanego warunku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 9.1.2. Warto´sci zwracane przez wyra˙zenia warunkowe . . . . . . . . . . . . . . . . . . . . . 181 9.1.3. Funkcja return(). Rekurencja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 9.2. P˛etle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 9.2.1. P˛etla while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 9.2.2. P˛etla repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 9.2.3. P˛etla for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 9.3. Uwagi na temat wydajno´sci p˛etli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 II Przygotowanie danych 10. Przetwarzanie napisów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 10.1. Podstawowe operacje na napisach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 10.1.1. Wyznaczanie długo´sci napisów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 10.1.2. Porównywanie napisów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 10.1.3. Ł ˛aczenie i powielanie napisów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 10.1.4. Przycinanie i wypełnianie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 10.1.5. Formowanie napisów na podstawie innych obiektów . . . . . . . . . . . . . . . . . . 208 10.1.6. Zmiana pojedynczych znaków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 10.1.7. Wyznaczanie podnapisów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 10.1.8. Pozostałe operacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 10.2. Wyszukiwanie wzorca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 10.2.1. Wzorce ustalone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 VIII SPIS TREŚCI 10.2.2. Wyra˙zenia regularne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.2.3. Wzorce rozmyte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 10.3. Data i czas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 10.3.1. Reprezentacja dat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 10.3.2. Reprezentacja czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 10.3.3. Operacje arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 10.3.4. Konwersja daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 10.4. Reprezentacja napisów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 10.4.1. Kodowanie ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 10.4.2. 8-bitowe kodowania polskich liter diakrytyzowanych . . . . . . . . . . . . . . . . . . 237 10.4.3. Kodowanie UTF-8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 10.4.4. Konwersja kodowa´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 11. Przetwarzanie plików . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 11.1. Podstawowe operacje na plikach i katalogach . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 11.1.1. ´Scie˙zki dost˛epu do plików i katalogów . . . . . . . . . . . . . . . . . . . . . . . . . . 241 11.1.2. Bie˙z ˛acy katalog roboczy. ´Scie˙zki wzgl˛edne . . . . . . . . . . . . . . . . . . . . . . . . 243 11.1.3. Informacje o plikach i katalogach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 11.1.4. Wybrane działania na plikach i katalogach . . . . . . . . . . . . . . . . . . . . . . . . 245 11.1.5. Wyszukiwanie plików i katalogów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 11.2. Serializacja i deserializacja obiektów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 11.3. Popularne formaty plików . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 11.3.1. Pliki CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 11.3.2. Pliki JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 11.3.3. Pliki XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 11.4. Dost˛ep do baz danych SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 11.5. Dowolne pliki tekstowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 11.5.1. Odczyt plików tekstowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 11.5.2. Zapis plików tekstowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 11.6. Poł ˛aczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 11.6.1. URL, czyli ujednolicony lokalizator zasobów . . . . . . . . . . . . . . . . . . . . . . 259 11.6.2. Tworzenie poł ˛acze´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 11.6.3. Otwieranie i zamykanie poł ˛acze´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 11.6.4. Odczyt danych z poł ˛acze´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 11.6.5. Zapis danych do poł ˛acze´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 11.6.6. Zarz ˛adzanie otwartymi poł ˛aczeniami . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 11.6.7. Nota o plikach binarnych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 III Prezentacja wyników 12. Tworzenie wykresów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 12.1. Schemat systemów graficznych w ´srodowisku R . . . . . . . . . . . . . . . . . . . . . . . . . . 271 12.2. Podstawy u˙zycia pakietu graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 12.2.1. Strona i rysunki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 12.2.2. Parametry graficzne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 12.2.3. Rysowanie punktów i odcinków (łamanych) . . . . . . . . . . . . . . . . . . . . . . . 279 12.2.4. Barwy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 12.2.5. Rysowanie wielok ˛atów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 12.2.6. Wypisywanie tekstu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 SPIS TREŚCI IX 12.2.7. Układ współrz˛ednych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 12.2.8. Tworzenie wielu rysunków na jednej stronie . . . . . . . . . . . . . . . . . . . . . . . 291 12.3. Wybrane wysokopoziomowe operacje graficzne . . . . . . . . . . . . . . . . . . . . . . . . . . 292 12.3.1. Rysowanie układu współrz˛ednych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 12.3.2. Adnotacje i legenda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 12.3.3. Wizualizacja danych jednowymiarowych . . . . . . . . . . . . . . . . . . . . . . . . . 295 12.3.4. Wizualizacja danych dwuwymiarowych . . . . . . . . . . . . . . . . . . . . . . . . . . 298 12.3.5. Wizualizacja danych wielowymiarowych . . . . . . . . . . . . . . . . . . . . . . . . . 302 12.4. Urz ˛adzenia graficzne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 12.4.1. Urz ˛adzenia pdf(), svg() i postscript() . . . . . . . . . . . . . . . . . . . . . . . 307 12.4.2. Urz ˛adzenia png() i jpeg() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 13. Generowanie raportów przy u˙zyciu pakietu knitr . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 13.1. J˛ezyk Markdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 13.2. Podstawy u˙zycia pakietu knitr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 13.3. Ustawienia wstawek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 13.3.1. Identyfikatory wstawek i zale˙zno´sci mi˛edzy nimi . . . . . . . . . . . . . . . . . . . . 320 13.3.2. Pami˛e´c podr˛eczna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 13.3.3. Wy´swietlanie kodu i wyników tekstowych . . . . . . . . . . . . . . . . . . . . . . . . 322 13.3.4. Rysunki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 13.3.5. Ustawienia globalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 IV Zastosowania 14. Obliczenia numeryczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 14.1. Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 14.2. Algebra wektorów i macierzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 14.2.1. Podstawowe operacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 14.2.2. Normy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 14.2.3. Metryki i inne odległo´sci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 14.2.4. Wektory i warto´sci własne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 14.2.5. Rozkład Choleskiego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 14.2.6. Rozkład QR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 14.2.7. Rozkład SVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 14.3. Ró˙zniczkowanie i całkowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 14.3.1. Ró˙zniczkowanie numeryczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 14.3.2. Całkowanie numeryczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 14.4. Optymalizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 14.4.1. Algorytmy programowania matematycznego . . . . . . . . . . . . . . . . . . . . . . . 362 14.4.2. Algorytmy optymalizacji ci ˛agłej ogólnego zastosowania . . . . . . . . . . . . . . . . 365 14.5. Interpolacja i wygładzanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 14.5.1. Interpolacja jednowymiarowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 14.5.2. Interpolacja dwuwymiarowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 14.5.3. Wygładzanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 14.6. Rozwi ˛azywanie (układów) równa´n (nie)liniowych . . . . . . . . . . . . . . . . . . . . . . . . 372 14.6.1. Wyznaczanie miejsc zerowych funkcji jednej zmiennej . . . . . . . . . . . . . . . . . 372 14.6.2. Rozwi ˛azywanie układów równa´n liniowych . . . . . . . . . . . . . . . . . . . . . . . 374 14.6.3. Rozwi ˛azywanie układów równa´n nieliniowych . . . . . . . . . . . . . . . . . . . . . 374 X SPIS TREŚCI 15. Symulacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 15.1. Generowanie liczb (pseudo)losowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 15.1.1. ´Zródła (pseudo)losowo´sci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 15.1.2. Okre´slanie ziarna generatora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 15.1.3. Szczegóły działania generatora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 15.2. Rozkłady prawdopodobie´nstwa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 15.2.1. Nazwy funkcji zwi ˛azanych z rozkładami . . . . . . . . . . . . . . . . . . . . . . . . . 381 15.2.2. Wybrane jednowymiarowe rozkłady prawdopodobie´nstwa . . . . . . . . . . . . . . . 382 15.2.3. Zmienne losowe wielowymiarowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 15.3. Przykładowe eksperymenty symulacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 15.3.1. Badanie mocy testu Shapiro–Wilka . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 15.3.2. Własno´sci estymatorów parametrów rozkładu Gamma . . . . . . . . . . . . . . . . . 392 15.3.3. Całkowanie Monte Carlo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 15.3.4. Kroswalidacja klasyfikatora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 V Zagadnienia zaawansowane 16. Zarz ˛adzenie ´srodowiskiem R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 16.1. Podstawowe informacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 16.1.1. Informacje o ´srodowisku R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 16.1.2. Informacje o systemie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 16.1.3. Uruchamianie i zamykanie ´srodowiska R . . . . . . . . . . . . . . . . . . . . . . . . . 407 16.1.4. Historia polece´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 16.2. Opcje globalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 16.3. Ustawienia lokalizacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 16.4. Rozszerzanie mo˙zliwo´sci ´srodowiska R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 16.4.1. Instalacja i aktualizacja pakietów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 16.4.2. Wywoływanie innych programów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 16.5. Zarz ˛adzanie pami˛eci ˛a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 16.5.1. Informacja o rozmiarze obiektów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 16.5.2. Kopiowanie na ˙z ˛adanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 16.5.3. Automatyczne od´smiecanie pami˛eci . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 16.6. Typ podstawowy, tryb a klasa obiektów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 17. ´Srodowiska . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 17.1. ´Srodowiska jako zbiory obiektów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 17.1.1. Podstawowe operacje na obiektach w ´srodowisku . . . . . . . . . . . . . . . . . . . . 429 17.1.2. ´Srodowiska a listy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 17.1.3. Przekazywanie ´srodowisk funkcjom . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 17.2. Wska´zniki na ´srodowiska otaczaj ˛ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 17.2.1. Przypadek r˛ecznie tworzonych ´srodowisk . . . . . . . . . . . . . . . . . . . . . . . . . 435 17.2.2. ´Scie˙zka wyszukiwania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 17.2.3. Przestrzenie nazw i ´srodowiska eksportowane przez pakiety . . . . . . . . . . . . . . 441 18. Syntaktyka i semantyka j˛ezyka R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 18.1. Obiekty reprezentuj ˛ace wyra˙zenia j˛ezyka R . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442 18.1.1. Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443 18.1.2. Cytowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 SPIS TREŚCI XI 18.1.3. Wywołania, czyli wyra˙zenia zło˙zone . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 18.2. ´Srodowiskowy model oblicze´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 18.2.1. Ewaluacja wyra˙ze´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 18.2.2. Bie˙z ˛ace ´srodowisko ewaluacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 18.3. Ewaluacja wyra˙ze´n w obr˛ebie funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 18.3.1. Lokalne ´srodowiska ewaluacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 18.3.2. ´Srodowiska otaczaj ˛ace lokalne ´srodowiska ewaluacyjne . . . . . . . . . . . . . . . . 460 18.3.3. ´Srodowiska wywołuj ˛ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 18.3.4. Ewaluacja argumentów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 18.4. Formuły . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 18.4.1. Przykłady funkcji stosuj ˛acych argumenty typu formuła . . . . . . . . . . . . . . . . . 471 18.4.2. Formuły jako wywołania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 18.4.3. Przetwarzanie formuł . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 19. Programowanie zorientowane obiektowo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 19.1. Paradygmaty programowania obiektowego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 19.2. Klasy S3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 19.2.1. Okre´slanie klasy obiektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 19.2.2. Ekspediowanie metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 19.2.3. Przeci ˛a˙zanie metod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 19.3. Klasy S4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 19.3.1. Definiowanie klas i tworzenie obiektów . . . . . . . . . . . . . . . . . . . . . . . . . . 484 19.3.2. Definiowanie funkcji generycznych i metod . . . . . . . . . . . . . . . . . . . . . . . 487 19.4. Klasy referencyjne (RC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 19.5. Specjalne rodzaje funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 19.5.1. Funkcje podstawieniowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 19.5.2. Przeci ˛a˙zanie operatorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 19.5.3. Wbudowane grupy funkcji generycznych . . . . . . . . . . . . . . . . . . . . . . . . . 495 20. Integracja R i C++ przy u˙zyciu pakietu Rcpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 20.1. Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 20.1.1. Tryby pracy z Rcpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 20.1.2. Podstawy składni j˛ezyka C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 20.2. Operacje na wektorach atomowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 20.2.1. Dost˛ep do wektorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 20.2.2. Tworzenie wektorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 20.2.3. Kopiowanie płytkie i gł˛ebokie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 20.2.4. Braki danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 20.2.5. Przegl ˛ad funkcji z R/C API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 20.2.6. Przegl ˛ad funkcji i metod z pakietu Rcpp . . . . . . . . . . . . . . . . . . . . . . . . . 520 20.3. Operacje na pozostałych typach obiektów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 20.3.1. Listy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 20.3.2. Funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 20.3.3. Atrybuty obiektów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 20.3.4. Obiekty typów zło˙zonych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 20.3.5. Wska´zniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 Skorowidz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 PRZEDMOWA Korporacje, rz ˛ady, instytuty naukowe, a nawet zwykli u˙zytkownicy internetu generuj ˛a informacje ró˙znego rodzaju: dotycz ˛ace rozrywki, kultury, komunikacji mi˛edzyludzkiej, ekonomii, handlu, przemysłu, transportu, zdrowia, ´srodowiska itd. Post˛ep technolo- giczny, jaki dokonał si˛e w naukach informacyjnych na przestrzeni ostatnich dekad, skutkuje tym, ˙ze dzisiejszy ´swiat wytwarza wi˛ecej danych, ni˙z jest ich w stanie efek- tywnie przetworzy´c. Owo „w ˛askie gardło” cz˛esto wcale nie jest spowodowane brakiem dost˛epno´sci odpowiednich algorytmów i narz˛edzi, ale raczej trudno´sci ˛a w znalezieniu – tak przecie˙z rozchwytywanych przez pracodawców – dobrze przygotowanych profesjo- nalistów. Przekształcanie surowych danych (ilo´sciowych, jako´sciowych, tekstu itp.) na przy- swajaln ˛a wiedz˛e jest celem działania m.in. analityków danych, specjalistów business intelligence, badaczy opinii i rynku czy wreszcie data scientists. Dziedziny te wymagaj ˛a nie tylko obycia w zakresie szeroko poj˛etej probabilistyki, szeregów czasowych, me- tod statystycznego i maszynowego uczenia si˛e, modelowania, przetwarzania obrazów, j˛ezykoznawstwa itp., co wystarczaj ˛aco pilny student mo˙ze pozna´c lepiej lub gorzej z ró˙znego rodzaju kursów lub lektury dost˛epnych podr˛eczników, lecz tak˙ze wyobra´zni, kreatywno´sci, komunikatywno´sci i znajomo´sci szczególnych obszarów zastosowa´n (np. procesów zachodz ˛acych w firmie, ekonomii, medycyny, nauk społecznych). I wreszcie, za wr˛ecz niezb˛edn ˛a uwa˙za si˛e biegł ˛a umiej˛etno´s´c obsługi narz˛edzi informatycznych, które słu˙z ˛a do przechowywania i przetwarzania informacji, wydobywania z nich wiedzy i prezentacji uzyskanych wyników – i to na poziomie, który nie tyle implikuje sprawne wykorzystanie istniej ˛acych rozwi ˛aza´n, ile przede wszystkim umo˙zliwia analiz˛e, projek- towanie, implementacj˛e, testowanie i wdra˙zanie własnych pomysłów, a tak˙ze dzielenie si˛e efektami pracy z innymi. R a inne programy. Na rynku znajdziemy szeroki wybór oprogramowania, które wspiera prac˛e analityków danych. Przede wszystkim mamy dost˛ep do narz˛edzi skro- jonych na miar˛e potrzeb tej grupy osób, przez co praca w nich jest bardzo wygodna i podstawowe czynno´sci mo˙zna wykona´c przy ich u˙zyciu naprawd˛e bardzo efektywnie. Nale˙z ˛a do nich m.in. SAS, Stata, Statistica, SPSS i Weka. Jednak˙ze w praktyce to, co jest ich zalet ˛a, mo˙ze szybko obróci´c si˛e w przypadku konieczno´sci zmierzenia si˛e z bardziej ambitnymi, nieszablonowymi zadaniami w wad˛e XIV PRZEDMOWA – a takich wyzwa´n jest coraz wi˛ecej. Pomimo do´s´c stromej, w ka˙zdym razie pocz ˛atkowo, „krzywej uczenia si˛e” ´srodowiska programistyczne, których trzonem s ˛a interpretowane j˛ezyki programowania ogólnego zastosowania, oferuj ˛a tu znacznie wi˛ekszy stopie´n swo- body, przez co mo˙zliwo´sci ich u˙zycia s ˛a praktycznie nieograniczone. W´sród najbardziej popularnych narz˛edzi tego typu znajdziemy m.in. ch˛etnie wybierany przez „rasowych” programistów j˛ezyk Python z rodzin ˛a pakietów SciPy, SciKits i Pandas, zob. [29], oraz szczególnie cenione przez statystyków, osoby zajmuj ˛ace si˛e wizualizacj ˛a danych i analityków danych z mniejszym informatycznym przygotowaniem, ´srodowisko R [73]. ´Srodowisko R, b˛ed ˛ace głównym bohaterem niniejszej ksi ˛a˙zki, jest aktywnie roz- wijane przez społeczno´s´c open source, której ka˙zdy z nas mo˙ze sta´c si˛e czynnym członkiem. Dzi˛eki wyt˛e˙zonej pracy licznych pasjonatów i systemowi ogólnie dost˛epnych pakietów1 (ang. packages) niezmiernie łatwe jest rozbudowywanie zdolno´sci tego narz˛e- dzia o tak istotne mo˙zliwo´sci jak komunikacja z bazami danych, przetwarzanie wielkich zbiorów danych, obliczenia równoległe, zbieranie danych ze stron internetowych itd. Mamy tutaj do wyboru mnóstwo implementacji znanych technik i metod statystycznej analizy danych oraz algorytmów maszynowego uczenia si˛e, m.in. analizy prze˙zycia, algorytmów bootstrapowych, sieci neuronowych, metod analizy regresji i klasyfikacji, analizy skupie´n, szeregów czasowych, danych finansowych, redukcji wymiarowo´sci itd. Co wi˛ecej, przegl ˛adaj ˛ac publikacje naukowe, mo˙zemy zaobserwowa´c, ˙ze wiele nowych metod analizy danych jest najpierw implementowanych wła´snie w R. CIEKAWOSTKA Du˙zym niedopatrzeniem jest okre´slanie R mianem „pakietu do oblicze´n statystycznych”. Taka etykieta działa wr˛ecz na jego szkod˛e, kreuje bowiem fałszyw ˛a opini˛e, ˙ze jest to narz˛edzie o w ˛askich mo˙zliwo´sciach. Po pierwsze, jest to całe ´srodowisko zbudowane wokół funkcyjnego, interpretowanego j˛ezyka programowania ogólnego zastosowania o naprawd˛e ciekawych i god- nych podziwu cechach – obliczenia statystyczne i wizualizacja danych s ˛a tylko jednym z wielu mo˙zliwych obszarów jego u˙zycia, aczkolwiek oczywi´scie najbardziej docenianym na całym ´swiecie. Po drugie, to wła´snie dzi˛eki pakietom (nakładkom rozszerzaj ˛acym jego mo˙zliwo´sci) ob- liczenia takowe s ˛a mo˙zliwe. Pakietów słu˙z ˛acych do przeprowadzania „oblicze´n statystycznych” (np. stats) nie trzeba wcale ładowa´c – zamiast nich mo˙zna korzysta´c z narz˛edzi zupełnie innego rodzaju (por. te˙z tematyk˛e najcz˛e´sciej pobieranych pakietów na s. 420). Cel ksi ˛a˙zki. Mówi si˛e, ˙ze komputer jest tak m ˛adry, jak jego programista. Dobry pro- gramista to taki, który potrafi zaprogramowa´c wszystko, o czym jest w stanie pomy´sle´c. Nabywszy solidnych umiej˛etno´sci, dostrzega, ˙ze cz˛esto nie warto jest „wywa˙za´c otwar- tych drzwi” i mo˙zna skorzysta´c z wyników pracy innych osób. Jest przygotowany jednak do tego, by dostrzec alternatywne podej´scia do interesuj ˛acego go zagadnienia, potrafi doceni´c ich mocne strony i dostrzec ograniczenia. Wreszcie wie, kiedy nale˙zy „wzi ˛a´c 1W repozytorium CRAN znajdziemy aktualnie (czerwiec 2016 r.) prawie 10 000 pakietów. Co wi˛ecej, obserwujemy, ˙ze liczba pakietów ro´snie wykładniczo. PRZEDMOWA XV sprawy w swoje r˛ece” i pewne mechanizmy dostosowa´c samodzielnie do własnych, konkretnych potrzeb. Znakomita cz˛e´s´c publikacji dost˛epnych nie tylko na polskim (por. np. [8, 9, 18, 34, 36, 77, 90, 99]), ale i zagranicznym rynku wydawniczym dotyczy sposobów wykorzysty- wania ´srodowiska R w ró˙znych zastosowaniach praktycznych – czyli uczy tak naprawd˛e obcowania z konkretnymi pakietami. Monografii na temat samego programowania w j˛e- zyku R jest niewiele. Oprócz napisanych przez jego twórców kilku pozycji, w szcze- gólno´sci [5, 14, 15, 89], w których s ˛a przede wszystkim omówione wybrane aspekty tworzenia oprogramowania i które s ˛a raczej przeznaczone dla tych, którzy znaj ˛a ju˙z ten j˛ezyk do´s´c dobrze, mamy jeszcze np. do´s´c przyst˛epnie napisane angielskoj˛ezyczne ksi ˛a˙zki [50, 56, 93]. ˙Zadna z nich nie omawia jednak zarówno fundamentów j˛ezyka, jak i zagadnie´n zaawansowanych w sposób wystarczaj ˛aco wyczerpuj ˛acy. WAŻNE Niniejsza publikacja stanowi kompletny i wyczerpuj ˛acy kurs programowania w j˛ezyku R – od omówienia podstaw j˛ezyka, a˙z po przedstawienie zaawansowanych zagadnie´n. Towarzysz ˛ace jej ´cwiczenia pomog ˛a rozwija´c umiej˛etno´sci biegłego implementowania nowych algorytmów, dostosowywania do własnych potrzeb ju˙z istniej ˛acych oraz auto- matyzowania ˙zmudnych – gdyby je wykonywa´c r˛ecznie – zada´n w dosłownie ka˙zdym obszarze zastosowa´n. Co wi˛ecej, lektura jej pozwoli zrozumie´c, dlaczego obliczenia w R s ˛a realizowane w taki, a nie inny sposób. Szczególna uwaga została po´swi˛econa sposobom ładowania i zapisywania zbiorów danych oraz ich generowaniu na podstawie ró˙znych ´zródeł, a tak˙ze ich wst˛epnej obróbce, czyszczeniu, a˙z po sam ˛a analiz˛e i prezentacj˛e wyników. Ma ona za zadanie wspomaga´c nas w drodze ku programistycznej samodzielno´sci – aby´smy mogli wyj´s´c poza gotowe schematy i ´smiało mierzy´c si˛e z nowymi wyzwaniami, przed którymi stawia nas tzw. era informacji. Odpowiedni nacisk został te˙z poło˙zony na tworzenie kodu wysokiej jako´sci, nie tylko w sensie jego poprawno´sci, czytelno´sci i łatwo´sci rozbudowy, ale i szybko´sci działania oraz ekonomicznego zu˙zywania pami˛eci. Omawiaj ˛ac zagadnienia programowania w j˛ezyku R na słusznym poziomie ogól- no´sci, zrezygnowali´smy ze „słownikowego” przegl ˛adu wielu ciekawych funkcji rozpro- szonych po ró˙znych pakietach (algorytmów weryfikacji hipotez, analizy wariancji i prze- ˙zycia, drzew klasyfikacyjnych, maszyn wektorów podpieraj ˛acych, szczególnych typów wykresów – lista ta mogłaby si˛e ci ˛agn ˛a´c w niesko´nczono´s´c). Obiecujemy jednak, ˙ze po lekturze tej ksi ˛a˙zki b˛edziemy w stanie znale´z´c potrzebne nam narz˛edzie i samodzielnie je pozna´c, a w razie potrzeby napisa´c własne. Dzi˛eki temu zmniejszyli´smy te˙z ryzyko tego, ˙ze dzieło to b˛edzie po prostu nie tylko nudne, ale i szybko si˛e zdezaktualizuje. Adresaci ksi ˛a˙zki. przez. . . zaprzeczenie. Otó˙z nie polecamy jej osobom, które: Idealnego Czytelnika tej ksi ˛a˙zki najłatwiej mo˙zemy okre´sli´c — wcale nie s ˛a zainteresowane tym, by nauczy´c si˛e programowa´c w j˛ezyku R, ani tym, by udoskonali´c swoje umiej˛etno´sci; XVI PRZEDMOWA — nie maj ˛a potrzeby w swojej pracy zawodowej lub naukowej wykonywa´c ˙zadnych oblicze´n, automatyzowa´c procesów przetwarzania danych ani tworzy´c grafiki u˙zytkowej (np. wykresów); — nie maj ˛a czasu przeczyta´c jej od pocz ˛atku do ko´nca; — znaj ˛a ju˙z j˛ezyk R tak (nie)dobrze, ˙ze wydaje im si˛e, i˙z niczego nowego si˛e nie dowiedz ˛a z lektury rozdz. 2–9; — nie zamierzaj ˛a twórczo poeksperymentowa´c z przedstawionymi przykładami oraz nie maj ˛a ch˛eci rozwi ˛azywania ´cwicze´n; — boj ˛a si˛e „zarazi´c” rado´sci ˛a z tworzenia nowego oprogramowania. W przeciwnym przypadku niniejsza pozycja jest po prostu idealna. Innymi słowy: WAŻNE Pozycj˛e t˛e mo˙zemy poleci´c ka˙zdemu, kto jest zainteresowany dokładnym poznaniem wszystkich mo˙zliwo´sci j˛ezyka i ´srodowiska R, a tak˙ze efektywnym wykorzystaniem go w swojej pracy zawodowej lub naukowej. Dotyczy to zarówno osób, które nie programo- wały jeszcze w R, jak i tych, które z poziomu podstawowego, ´sredniozaawansowanego lub zaawansowanego chc ˛a wspi ˛a´c si˛e jeszcze wy˙zej. Układ ksi ˛a˙zki. Przedstawiony w ksi ˛a˙zce materiał jest podzielony na pi˛e´c nast˛epuj ˛a- cych bloków tematycznych: 1) W pierwszej cz˛e´sci przedstawiamy elementarz programowania w R oraz najwa˙z- niejsze operacje na podstawowych typach danych, w tym na wektorach atomo- wych, funkcjach i listach. Tłumaczymy, dlaczego w R nale˙zy unika´c stosowania m.in. p˛etli i jak si˛e bez nich oby´c. Mówimy te˙z o atrybutach obiektów i ich roli w programowaniu zorientowanym obiektowo w stylu S3 oraz o tym, ˙ze typy zło˙zone, takie jak macierz, czynnik czy ramka danych, s ˛a prostym rozszerzeniem typów podstawowych. Przedstawimy najwa˙zniejsze techniki piel˛egnowania kodu i zapewniania, ˙ze b˛edzie on dobrej jako´sci, po czym wprowadzimy wyra˙ze- nia słu˙z ˛ace do samodzielnej kontroli przepływu sterowania, które przydaj ˛a si˛e w sytuacjach, gdy jakiego´s algorytmu naprawd˛e nie da si˛e zaimplementowa´c wył ˛acznie przy u˙zyciu funkcji wbudowanych. 2) W drugiej cz˛e´sci omawiamy sposoby przetwarzania danych tekstowych, od- czytywania i zapisywania najwa˙zniejszych formatów plików, zbierania danych ze stron internetowych oraz dost˛epu do baz danych SQL. 3) Trzeci ˛a cz˛e´s´c po´swi˛ecamy prezentacji wyników oblicze´n, w tym tworzeniu do- wolnie skomplikowanych wykresów i raportów. 4) W czwartej cz˛e´sci doskonalimy nasze umiej˛etno´sci w konkretnych obszarach zastosowa´n: analizie danych, obliczeniach numerycznych i naukowych oraz sy- mulacjach. 5) W pi ˛atej cz˛e´sci poznajemy zaawansowane aspekty programowania w j˛ezyku R, takie jak ´srodowiskowy model oblicze´n, parsowanie i niestandardow ˛a ewalu- acj˛e wyra˙ze´n oraz mechanizmy programowania zorientowanego obiektowo przy PRZEDMOWA XVII u˙zyciu klas typu S3, S4 i RC. Mówimy tak˙ze, jak tworzy´c rozszerzenia dla ´srodowiska R w j˛ezyku C++, która to umiej˛etno´s´c przydaje si˛e szczególnie w sy- tuacjach, gdy pewne funkcje okazuj ˛a si˛e by´c „w ˛askim gardłem” pod wzgl˛edem wydajno´sci lub zu˙zycia pami˛eci. Zmiany w drugim wydaniu. Pierwsze wydanie Programowania w j˛ezyku R zostało przygotowane w 2013 r. W ukazuj ˛acym si˛e po 3 latach drugim wydaniu zaszedł szereg istotnych zmian – wszystkie partie tekstu zostały zrewidowane, a wiele z nich nawet zostało napisanych ponownie. Do najbardziej zauwa˙zalnych ró˙znic mo˙zemy zaliczy´c: — uproszczenie materiału przedstawianego na pocz ˛atku ka˙zdego rozdziału – trud- niejsze partie zostały przesuni˛ete zgodnie z duchem „od ogółu do szczegółu”; — dodanie ´cwicze´n (wraz z rozwi ˛azaniami) do tekstu głównego; — zamieszczenie wi˛ekszej liczby przykładów z analizy danych (opis implementacji wielu wa˙znych metod maszynowego uczenia si˛e, wi˛ecej uwagi po´swi˛econej ramkom danych); — nowy rozdział na temat integracji C++ z R (rozdz. 20; coraz wi˛ecej pakietów jest tworzona przy u˙zyciu Rcpp, co bardzo pozytywnie wpłyn˛eło w ostatnich latach na szeroko poj˛et ˛a jako´s´c tego rodzaju dodatków); — omówienie pakietu stringi w rozdziale na temat przetwarzania napisów (rozdz. 10); — przesuni˛ecie rozdziału na temat p˛etli najdalej, jak to było mo˙zliwe; — opis sposobów dost˛epu do baz danych SQL, przetwarzania plików JSON i XML oraz technik wydobywania informacji ze stron internetowych (web scraping) w rodz. 11; — zł ˛aczenie dwóch rozdziałów na temat generowania grafiki w jeden (rozdz. 12); — opis j˛ezyka Markdown w rozdz. 13 (jego popularno´s´c i dost˛epno´s´c z poziomu R w ostatnim czasie znacz ˛aco wzrosła); — dokładniejsze omówienie sposobów tworzenia pakietów i poprawy jako´sci kodu — bardziej przyst˛epne omówienie mechanizmów niestandardowej ewaluacji i jej w rozdz. 8; znaczenia w rozdz. 17 i 18. Uwagi o u˙zytym oprogramowaniu. Wszystkie obliczenia zostały wykonane przy u˙zyciu ´srodowiska R w wersji deweloperskiej 3.4.0 (SVN rev. 70486) oraz pakietu knitr (por. [97] i rozdz. 13), a sama ksi ˛a˙zka została zło˙zona w systemie LATEX [47, 68]. Podzi˛ekowania. Dzi˛ekuj˛e moim przyjaciołom i bliskim współpracownikom za liczne uwagi i komentarze na ró˙znych etapach przygotowywania pierwszego i/lub drugiego wydania, w szczególno´sci Maciejowi Bartoszukowi, Annie Cenie, Janowi Laskowi, dr Annie Olwert, Agacie Sakowicz, Bartłomiejowi Tartanusowi, Barbarze ˙Zogale-Siudem oraz p. red. Izabeli Mika. Składam tak˙ze wyrazy podzi˛ekowania dla moich studentów z Wydziału Matematyki i Nauk Informacyjnych Politechniki Warszawskiej, uczestnikom i organizatorom kursów Data Science Retreat w Berlinie i International PhD Studies Program w Instytucie Podstaw Informatyki PAN, a tak˙ze wszystkim u˙zytkownikom XVIII PRZEDMOWA pakietów, których jestem autorem lub współautorem. Inspirujecie mnie do ci ˛agłego doskonalenia moich umiej˛etno´sci. Zdaj˛e sobie spraw˛e, ˙ze dzieło takiej obj˛eto´sci nie jest niestety pozbawione bł˛edów, za które całkowit ˛a odpowiedzialno´s´c ponosz˛e oczywi´scie ja sam. Prosz˛e wi˛ec o zgłaszanie wszelkich uwag na mój adres e-mail: marek@gagolewski.com. Na stronie internetowej github.com/gagolews/Programowanie_w_jezyku_R/, do której odwiedzenia zach˛e- cam, zamie´sciłem przykładowe kody ´zródłowe i aktualn ˛a wersj˛e erraty. Marek G ˛agolewski Warszawa, czerwiec 2016 r. Cz ˛e´s ´c I PODSTAWY ŚRODOWISKO R I PROGRAM RSTUDIO 1 R jest wolnym (otwartym i darmowym), zaawansowanym ´srodowiskiem oraz j˛ezykiem programowania cenionym na ´swiecie przede wszystkim za mo˙zliwo´sci przeprowadzania w nim odtwarzalnych (ang. reproducible) oblicze´n statystycznych i numerycznych, analizy danych oraz tworzenia raportów i wysokiej jako´sci grafiki. ´Srodowisko R powstało w 1997 r. na Uniwersytecie w Auckland w Nowej Zelandii. Jest ono otwart ˛a alternatyw ˛a dla u˙zywanego jeszcze przez niektóre instytucje komercyj- nego pakietu S-PLUS, zaprojektowanego w laboratoriach Bella przez Johna Chambersa i jego kolegów. Rozwija si˛e bardzo dynamicznie: kolejne wydania, uwzgl˛edniaj ˛ace nowe funkcje i poprawki starych bł˛edów, pojawiaj ˛a si˛e kilka razy w roku. Pierwsza „nietestowa” wersja 1.0 została wydana w 2000 r., a jego dojrzało´s´c potwierdza wydana w 2013 r. wersja 3.0. J ˛adro R składa si˛e z napisanej w j˛ezykach C i Fortran implementacji znanego od 1976 r. i wci ˛a˙z rozwijanego j˛ezyka S1. WAŻNE Licencja GNU GPL (ang. General Public License) zezwala na wykorzystywanie ´srodowiska R tak˙ze w zastosowaniach komercyjnych. Na marginesie, ´srodowisko to jest czasem nazywane GNU S, by podkre´sli´c jego otwarto´s´c. Istnieje tak˙ze jego komercyjna wersja, zoptymalizowana pod k ˛atem wysoko wydajnych oblicze´n na du˙zych zbiorach danych – Microsoft R. 1.1. Cechy języka i środowiska R J˛ezyków programowania jest wiele i, co warte podkre´slenia, ˙zaden z nich nie jest idealny. Niektóre j˛ezyki s ˛a jednak uznawane za szczególnie godne uwagi w okre´slonych zastoso- waniach. Zawsze warto zna´c nie tylko mocne strony, ale i ograniczenia u˙zywanego przez siebie narz˛edzia, aby móc lepiej wykorzysta´c je w praktyce. Składnia R przypomina t˛e stosowan ˛a w C i C++, jednak jego semantyka jest zbli˙zona do funkcyjnego Scheme, por. [1]. 1Dlatego programistów j˛ezyka R mo˙ze tak˙ze zainteresowa´c literatura dedykowana S. 4 1.2. ORGANIZACJA PRACY W R I RSTUDIO Nast˛epuj ˛ace cechy j˛ezyka R s ˛a warte odnotowania. — Jest j˛ezykiem ogólnego zastosowania – mo˙zna w nim zaimplementowa´c prak- tycznie ka˙zdy algorytm. Odró˙znia go to od j˛ezyków szczególnego zastosowania, takich jak np. SQL. — Jest przeznaczony raczej do pisania „małych” programów, w których wa˙zne jest sedno, a nie „otoczka”. Skupiamy si˛e tutaj najcz˛e´sciej na samych obliczeniach, a nie np. na sposobach interakcji z u˙zytkownikiem, którym najcz˛e´sciej jest bowiem ´sci´sle okre´slony specjalista. — R cechuje si˛e bardzo zwi˛ezł ˛a składni ˛a, tzn. mało kodu daje du˙zy, do´s´c zło˙zony rezultat. Owa ekspresywno´s´c znacz ˛aco ułatwia programowanie. — Jest j˛ezykiem interpretowanym. Dzi˛eki temu mo˙zna pracowa´c w nim w sposób interaktywny, prawie natychmiast otrzymuj ˛ac wynik wykonywanych polece´n. Doskonale ułatwia to wytwarzanie prototypów implementacji ciekawych algo- rytmów (ang. rapid prototyping). Mimo ˙ze przez to programy tworzone w ten sposób b˛ed ˛a nieco mniej wydajne od j˛ezyków kompilowanych, w R mo˙zemy łatwo odwoływa´c si˛e do gotowego, skompilowanego kodu pochodz ˛acego z zewn˛etrznych, dynamicznie ładowanych bibliotek. Z tego powodu cz˛esto twórcy pakietów R decyduj ˛a si˛e na tworzenie newralgicznych fragmentów kodu w j˛ezyku C lub C++, np. przy u˙zyciu pakietu Rcpp (rozdz. 20), by zapewni´c u˙zytkownikom ko´ncowym dobrze zoptymalizowane pod wzgl˛edem czasochłonno´sci rozwi ˛azania. Nale˙zy tak˙ze zwróci´c uwag˛e, ˙ze interesuj ˛acy nas j˛ezyk jest składnikiem wi˛ekszego „ekosystemu” – z tego te˙z powodu bardzo cz˛esto mówimy o całym ´srodowisku R. — Ma ono do´s´c rozbudowane mo˙zliwo´sci generowania wysokiej jako´sci grafiki (wykresy, diagramy) do wszelkiego rodzaju publikacji, por. rozdz. 12. — W repozytorium CRAN (Comprehensive R Archive Network) udost˛epnionych jest prawie 10 000 pakietów rozszerzaj ˛acych mo˙zliwo´sci bazowego R. Zostały one stworzone przez dokładnie takich pasjonatów tego ´srodowiska, jak my. Uniksowa filozofia tego ´srodowiska objawia si˛e w dobrej współpracy z innymi aplikacjami (np. programem do składu publikacji LATEX, parserami j˛ezyka Mark- down) – co jeszcze lepiej pozwala nam korzysta´c z jego mo˙zliwo´sci. — R ma obszern ˛a, łatwo dost˛epn ˛a dokumentacj˛e. Je´sli chodzi o zastosowania, a zwłaszcza ukierunkowanie na tzw. obliczenia na- ukowe, najbardziej podobne do R jest ´srodowisko Matlab oraz j˛ezyk Python wraz z rodzin ˛a pakietów SciPy, SciKits i Pandas, por. [29]. 1.2. Organizacja pracy w R i RStudio R jest dost˛epny m.in. na platformy Windows, Linux, Solaris i OS X. Jego wersj˛e instalacyjn ˛a mo˙zna pobra´c ze strony www.r-project.org/. Otwieramy zakładk˛e CRAN, 1.2. ORGANIZACJA PRACY W R I RSTUDIO 5 wybieramy swój ulubiony (np. 0-Cloud) serwer „lustrzany” (od ang. mirror)2, a na- st˛epnie klikamy Download for platforma . Warto w tym miejscu zauwa˙zy´c, ˙ze wiele dystrybucji systemu Linux umo˙zliwia zainstalowanie R przez wła´sciwe sobie narz˛edzie (np. dnf dla systemu Fedora i Red Hat lub apt-get dla Ubuntu i Debian) – w takim przypadku b˛edziemy mieli automatyczny dost˛ep do najnowszych aktualizacji zarówno samego ´srodowiska, jak i towarzysz ˛acych mu pakietów dodatkowych. U˙zytkownicy R dla Windows mog ˛a uruchomi´c bardzo prosty interfejs u˙zytkownika, klikaj ˛ac odpowiedni ˛a ikon˛e w menu Start. Jako ˙ze w nast˛epnym podrozdziale przej- dziemy do omawiania o wiele wygodniejszego ´srodowiska programistycznego, jakim jest RStudio, nie b˛edziemy w tym miejscu zagł˛ebia´c si˛e w obsług˛e tzw. R GUI. informacj˛e zwrotn ˛a o przebiegu jego wykonania; R mo˙ze pracowa´c w dwóch trybach: — w trybie interaktywnym, gdzie po ka˙zdym wydanym poleceniu otrzymujemy — w trybie wsadowym (ang. batch mode), w którym zlecamy ´srodowisku R urucho- mienie danego pliku ´zródłowego (skryptu), czyli pliku tekstowego najcz˛e´sciej o rozszerzeniu .R, zawieraj ˛acego kolejne polecenia j˛ezyka R przeznaczone do wykonania. W codziennej pracy u˙zywa si˛e swoistej mieszanki tych dwóch trybów, pracuj ˛ac raz z pojedynczymi poleceniami, a kiedy indziej z całymi zbiorami plików ´zródłowych (skryptów). Zobaczymy, ˙ze takie podej´scie b˛edzie dla nas lada moment najbardziej naturalne. CIEKAWOSTKA Systemy operacyjne z rodziny UNIX, a wi˛ec m.in. Solaris, OS X oraz ró˙zne dystrybucje Linuxa, s ˛a doskonale przystosowane do tworzenia oprogramowania (tak˙ze w j˛ezyku R). Zach˛ecamy wi˛ec u˙zytkowników systemu Windows do wypróbowania jakiej´s dystrybucji Linuxa – szczególnie Ubuntu i Mint s ˛a uznawane za przyjazne dla pocz ˛atkuj ˛acych. Zainstalowa´c j ˛a mo˙zna łatwo na maszynie wirtualnej (cho´cby przy u˙zyciu Oracle VM Virtual Box), dzi˛eki czemu nie trzeba rekonfigurowa´c ustawie´n komputera – pracujemy wówczas w nowym systemie po prostu w „do- datkowym okienku”. 1.2.1. Konsola R Po uruchomieniu konsoli R (udost˛epnianej tak˙ze przez R GUI pod Windows) zostaniemy powitani stosownymi komunikatami, por. rys. 1.1. Mo˙zemy teraz np. wy´swietli´c infor- macj˛e o zainstalowanej na naszym komputerze wersji tego ´srodowiska, wpisuj ˛ac: 2Serwery „lustrzane” udost˛epniaj ˛a wierne kopie zasobów projektu R. Utrzymywane s ˛a bezpłatnie, z dobrej woli ich wła´scicieli, przez ró˙zne instytucje naukowe i komercyjne. 6 1.2. ORGANIZACJA PRACY W R I RSTUDIO Rysunek 1.1. Konsola R pod systemem Linux zaraz po uruchomieniu R.version.string [1] R Under development (unstable) (2016-04-14 r70486) getRversion() [1] ’3.4.0’ Widzimy, ˙ze w niniejszym opracowaniu korzystamy z deweloperskiej wersji R, która w przyszło´sci zostanie oznaczona numerem 3.4.0. Aby zako´nczy´c bie˙z ˛ac ˛a sesj˛e, wpisujemy: q() i na pytanie, czy zapisa´c aktualny obraz przestrzeni roboczej, odpowiadamy Nie. 1.2.2. Program RStudio Bezpłatny, otwarty program RStudio Desktop mo˙zna pobra´c ze strony internetowej www.rstudio.com/products/rstudio/. Działa on w systemach Windows, Linux i OS X. Aplikacja ta to tzw. zintegrowane ´srodowisko programistyczne (IDE, integrated deve- lopment environment) dla istniej ˛acej ju˙z w systemie instalacji R. RStudio znakomicie ułatwia prac˛e ze ´srodowiskiem R dzi˛eki m.in.: — licznym rozszerzeniom mo˙zliwo´sci konsoli; 1.2. ORGANIZACJA PRACY W R I RSTUDIO 7 — wygodnemu zarz ˛adzaniu plikami ´zródłowymi (tak˙ze w ró˙znych kodowaniach i z automatycznym kolorowaniem składni nie tylko j˛ezyka R, ale te˙z Markdown i C++) oraz całymi projektami; — zintegrowanemu systemowi pomocy i narz˛edziom wspomagaj ˛acym zarz ˛adzanie — obsłudze systemów kontroli wersji oprogramowania typu Git. generowanymi plikami graficznymi; Co wa˙zne, program ten tworz ˛a osoby ˙zywo zaanga˙zowane w tworzenie pakietów R oraz szkolenie jego u˙zytkowników – jest on wi˛ec dobrze dostosowany zarówno do potrzeb osób pocz ˛atkuj ˛acych, jak i profesjonalistów. niami. Okno RStudio składa si˛e z czterech cz˛e´sci, domy´slnie: Rysunek 1.2 przedstawia wygl ˛ad uruchomionego programu z domy´slnymi ustawie- 1) edytora otwartych plików/skryptów i podgl ˛adu własno´sci obiektów (okienko po 2) znanej ju˙z nam konsoli R rozbudowanej o bardziej zaawansowane opcje edycyjne lewej u góry); i kolorowanie składni j˛ezyka (po lewej u dołu); 3) listy obiektów w sesji roboczej i historii polece´n (po prawej u góry); 4) prostego mened˙zera plików, podgl ˛adu rysunków, wykazu dost˛epnych pakietów R i przegl ˛adarki dokumentacji (po prawej u dołu). Rysunek 1.2. Program RStudio Prac˛e w programie RStudio mo˙zna organizowa´c przy u˙zyciu tzw. przestrzeni robo- czych (workspaces), które przechowuj ˛a wszystkie utworzone przez nas obiekty i cał ˛a histori˛e wykonanych do tej pory polece´n, por. rozdz. 16. T˛e funkcjonalno´s´c udost˛epnia 8 1.2. ORGANIZACJA PRACY W R I RSTUDIO tak˙ze „zwykły” R. Ponadto mo˙zemy w RStudio tak˙ze tworzy´c tzw. projekty, w których dodatkowo zapisujemy informacje m.in. o ostatnio edytowanych przez nas plikach ´zró- dłowych (skryptach) czy rysunkach. Gdy poznamy ´srodowisko R nieco lepiej, b˛edziemy cz˛esto z nich korzysta´c, stosuj ˛ac zasad˛e jedno oprogramowywane „du˙ze” zagadnienie – jeden oddzielny projekt. Ogólnie rzecz bior ˛ac, przyjmuje si˛e zasad˛e, ˙ze na potrzeby ka˙zdego projektu tworzymy oddzielny folder na dysku. CIEKAWOSTKA RStudio dost˛epne jest tak˙ze w wersji Server. Dzi˛eki niemu mo˙zna udost˛epnia´c innym osobom mo˙zliwo´s´c przeprowadzania oblicze´n w ´srodowisku R z ka˙zdego miejsca na ´swiecie przez przegl ˛adark˛e internetow ˛a. RStudio Server zapewnia interfejs działaj ˛acy i wygl ˛adaj ˛acy dokładnie tak samo jak RStudio Desktop. 1.2.3. Pierwsze kroki w trybie interaktywnym Prastara ´swiecka tradycja głosi, ˙ze ka˙zdy kurs programowania nale˙zy zacz ˛a´c od przy- witania szerokiego grona odbiorców stosownym komunikatem. Powstrzymuj ˛ac si˛e od przekory, wywołajmy wi˛ec nast˛epuj ˛ace polecenie na konsoli. Wprowadzamy je po tzw. znaku zach˛ety (od ang. command prompt), tj. „ ”. cat( W tak pięknych okolicznościach przyrody...\n ) Otrzymujemy nast˛epuj ˛acy komunikat: W tak pięknych okolicznościach przyrody... Zauwa˙zmy, ˙ze „\n ” oznacza tutaj znak nowego wiersza, tj. znak steruj ˛acy, który na- kazuje przesuni˛ecie do kolejnego wiersza aktualnej pozycji, na której jest wypisywany tekst. Co wi˛ecej, zauwa˙zmy, ˙ze napis do wydrukowania został uj˛ety w cudzysłów. WAŻNE Osoby maj ˛ace cho´c minimalne do´swiadczenie z j˛ezykami programowania takimi jak C, C++ czy Java od razu zauwa˙z ˛a, ˙ze w R nie jest potrzebny ˙zmudny czasem proces kompilacji programu. Nie ma tak˙ze konieczno´sci umieszczenia wykonywanego kodu zawsze w oddzielnych plikach ´zródłowych. Wydawane polecenia s ˛a interpretowane przez R w miejscu i natychmiast wykonywane. Innymi słowy, R jest j˛ezykiem interpretowanym. Ponadto wła´snie skorzystali´smy z tzw. trybu interaktywnego (pytanie → odpowied´z). Od samego pocz ˛atku powinni´smy zacz ˛a´c nabiera´c dobrych nawyków opisywania naszego kodu. Do tworzenia komentarzy u˙zywamy znaku „#” – ka˙zdy wyst˛epuj ˛acy po nim tekst, a˙z do ko´nca wiersza, b˛edzie przez interpreter ignorowany. 1.2. ORGANIZACJA PRACY W R I RSTUDIO 9 cat( ...i niepowtarzalnej...\n ) # wypisuje cytat z filmu „Rejs” na konsoli ...i niepowtarzalnej... Na marginesie, w wielu j˛ezykach programowania konieczne jest stawianie specjal- nego znaku na ko´ncu ka˙zdego wyra˙zenia. Zapominanie o nim jest cz˛est ˛a przyczyn ˛a bł˛edów kompilacji. W R, tak samo jak w j˛ezykach C lub Java, słu˙zy´c mo˙ze do tego celu ´srednik. Jednak˙ze ´sredniki s ˛a w naszym przypadku potrzebne tylko wtedy, gdy chcemy z jakich´s powodów zapisa´c wiele polece´n w jednym wierszu. W innych przypadkach to po prostu znak nowego wiersza powiadamia interpreter o ko´ncu polecenia. # tutaj średnik jest konieczny (dwa wyrażenia w jednym wierszu): cat( Pani pozwoli... \n ); cat( i Pan również... \n ) Pani pozwoli... i Pan również... # tutaj średnik jest zbędny (pomijanie go jest dobrą praktyką): cat( że skoczę po swoją żonę.\n ); że skoczę po swoją żonę. Sprawd´zmy, co si˛e stanie, gdy „rozbijemy” pojedyncze polecenie na dwa
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Programowanie w języku R.
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: