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)