2 Start R
Wykonywanie kodu w języku interpretowalnym, jakim jest R, może odbywać się poprzez wpisanie polecenia w oknie konsoli (zwanej też terminalem) i jego uruchomienie17. Komendy są najpierw sprawdzanie pod kontekstem ich poprawności. Polega to na określeniu, np. czy podana funkcja lub inny obiekt istnieje, czy nie zostały użyte niedozwolone znaki, lub czy wszystkie nawiasy czy cudzysłowy zostały zamknięte. Języki programowania są w tym aspekcie bardziej bezwzględne niż języki naturalne - nie potrafią one zrozumieć wyrażeń zawierających nawet niewielkie błędy takie jak, np. użycie dużej litery zamiast małej.
2.1 Wyrażenia
Podstawowe działania arytmetyczne, dodawanie, odejmowane, mnożenie i dzielenie, są również często używane w wielu językach programowania.
Dla każdej z tych operacji istnieje odpowiedni operator w R.
Operatorem dodawania jest +
.
2 + 2
#> [1] 4
Operatorem odejmowania jest -
.
1 - 3
#> [1] -2
Operatorem mnożenia jest *
.
5 * 5
#> [1] 25
Operatorem dzielenia jest /
.
42 / 5
#> [1] 8.4
Wszystkie powyższe operacje można wykonać poprzez ich wpisanie w oknie konsoli R i naciśnięcie klawisza Enter.
2.2 Obiekty
“Dwa slogany są pomocne w zrozumieniu obliczeń w R: 1. Wszystko co istnieje jest obiektem. 2. Wszystko co się dzieje jest wywołaniem funkcji.” John Chambers
Powyższy cytat sugeruje dwa najważniejsze elementy języka R: obiekty i funkcje. Zrozumienie w jaki sposób się je tworzy i zmienia będzie w związku z tym, konieczną wiedzą osób piszących w tym języku.
2.2.1 Operator przypisania
Nadanie wartości do obiektu wykonuje się używając operatora przypisania18.
R posiada trzy operatory przypisania, które mają niemal identyczne działanie19: =
, <-
, ->
.
Warto wybrać jeden z tych operatorów i konsekwentnie używać go pisząc kod.
W tej książce jako główny operator przypisania będzie używany znak =
.
W poniższej linii stworzony jest nowy obiekt, o nazwie x
, który zawiera wartość 7
.
7 x =
Można to sprawdzić wpisując nazwę tego obiektu.
x#> [1] 7
Operatory przypisania może również posłużyć do nadania wartości z jednego obiektu do drugiego.
Poniżej nowy obiekt y
przyjmuje wartość od obiektu x
.
x
y =
y#> [1] 7
Język R przechowuje i przetwarza wszystkie obiekty w pamięci komputera (RAM). Wpływa to na zwiększoną wydajność i elastyczność obliczeń, ale jednocześnie powoduje to ograniczenie wielkości obiektów na jakich można pracować. Istnieje równocześnie szereg strategii jak postępować z większymi zbiorami danych, które nie mieszczą się w RAMie (Peng, Kross, and Anderson 2017).
2.2.2 Działania na obiektach
Każdy stworzony obiekt w R może być następnie używany do kolejnych operacji, a w efekcie też tworzenia nowych obiektów.
W poniższych czterech przypadkach obiekt x
został przetworzony używając operatorów dodawania, odejmowania, mnożenia oraz dzielenia, a jako wyniki tych obliczeń powstały nowe obiekty.
x + 3
z1 =
z1#> [1] 10
x - 5
z2 =
z2#> [1] 2
x * 2
z3 =
z3#> [1] 14
x / 4
z4 =
z4#> [1] 1.75
x
zostanie zadeklarowany jako liczba całkowita (integer), wynikiem dzielenia x / 4
będzie 1
zamiast 1.75
.
Działania na obiektach mogą też się odbywać używając innych operatorów oraz różnorodnych funkcji.
Przykładowo, operator zapisywany jako %%
to modulo, którego celem jest określanie reszty z dzielenia.
x %% 3
z5 =
z5#> [1] 1
Operator %/%
przedstawia dzielenie całkowite.
x %/% 3
z6 =
z6#> [1] 2
Operator ^
natomiast wykonuje podniesienie wartości obiektu do wybranej potęgi.
x^2
z7 =
z7#> [1] 49
Odwrotnością potęgowania jest pierwiastkowanie.
W R nie istnieje do tego celu specjalny operator, ale zawiera on funkcję sqrt()
.
sqrt(x)
z8 =
z8#> [1] 2.65
Często używaną funkcją w R jest też c()
.
Ta funkcja łączy krótsze wektory w dłuższe wektory.
c(z2, z4, z8)
z9 =
z9#> [1] 2.00 1.75 2.65
Operatory użyte w tym rozdziale, np. +
, *
, ^
, %%
to też są funkcje, ale zapisane w skrótowej formie ułatwiającej z nimi pracę.
Te operatory można też użyć jako normalne funkcje poprzez dodanie znaku zwanego grawisem - “`
”, np. 2 + 2
można też zapisać jako `+`(2, 2)
.
2.3 IDE
Zintegrowane środowisko programistyczne (ang. Integrated Development Environment, IDE) to program ułatwiający pisanie kodu. Zawiera on wiele użytecznych funkcjonalności, takich jak wbudowany edytor i konsola, podświetlanie składni, automatyczne uzupełnianie kodu, itd. Bez IDE kod musi być pisany w jednym programie, a następnie kopiowany i uruchamiany w innym.
Do popularnych IDE dla R należą:
- RStudio
- Emacs + ESS
- vim + Nvim-R
- Visual Studio + RTVS
W tej książce będzimy korzystać z pierwszego z nich. RStudio to zintegrowane środowisko programistyczne pierwotnie stworzone dla R.
Typowa praca w RStudio często polega na wpisywaniu poleceń do pliku tekstowego widocznego w części skryptowej (rycina 2.1), a następnie wykonywaniu kolejnych linii kodu w oknie konsoli używając skrótu klawiaturowego CTRL+ENTER (więcej przydatnych skrótów klawiaturowych można znaleźć w tabeli 2.1). Efektem wykonywania funkcji może być powstanie nowych obiektów, które można zobaczyć w oknie “środowiska” lub też wyświetlenie grafik, które można zobaczyć w oknie “wykresu” (rycina 2.1).
Dobrą praktyką pracy z R w RStudio jest też używanie projektów RStudio (ang. RStudio projects). Projekt jest to folder zawierający wszystkie skrypty i pozostałe pliki powiązane z jakimś zadaniem (np. analizą danych, czy stworzeniem nowego pakietu R). Ułatwia on przenoszenie kodu pomiędzy różnymi komputerami, a także daje dostęp do szeregu dodatkowych możliwości w RStudio.
Aby stworzyć pierwszy projekt RStudio, należy:
- Kliknąć
File -> New Project
. - Wybrać
New Directory
. - Wybrać
New Project
. - Podać nazwę nowego projektu, np. “programowanie1” oraz wybrać miejsce na dysku, gdzie ma się nowy projekt znajdować.
- Jeżeli możliwe, to wybrać też opcję
Create a git repository
. - Kliknąć
Create Project
.
W ten sposób zostanie utworzony nowy folder wraz z plikiem o nazwie projektu z rozszerzeniem .Rproj
, np. programowanie1.Rproj
.
Ten folder staje się też od razu folderem roboczym (więcej na ten temat znajdziesz w rozdziale 9).
Otwarcie wcześniej stworzonego projektu ma miejsce poprzez uruchomienie pliku z rozszerzeniem .Rproj
lub też wybór projektu w prawym górnym rogu RStudio.
Skrót | Wyjaśnienie |
---|---|
Ctrl+Enter | Wykonuje wybraną linię kodu w skrypcie R |
Tab | Uzupełnia kod (podaje pasujące możliwości) |
F1 | Wyświetla plik pomocy dla wybranej funkcji |
Ctrl+Shift+C | Ustawia wybrane linie jako komentarz/odkomentuj fragment kodu |
strzałka Góra/Dół (w oknie konsoli) | Wybiera wcześniej wpisany kod |
Esc | Przerywa niedokończoną operację |
Shift+Alt+K | Wyświetla listę skrótów klawiaturowych |
2.4 Styl
Języki programowania pozwalają na napisanie dokładnie tego samego kodu na wiele sposobów.
Przykładowo z1 = x + 3
ma identyczne działanie jak z1=x+3
.
Styl pisania kodu obejmuje, między innymi, sposoby nazywania obiektów, stosowania odstępów czy wcięć, czy też pisania komentarzy.
Przyjęcie wybranego stylu pozwala na ułatwienie czytania i zrozumienia kodu oraz zmniejszenie szans na powstawanie w nim błędów.
Poniżej znajdują się podstawowe porady dotyczące stylu pisania kodu. Więcej wskazówek można znaleźć na w poradniku stylu RStudio oraz poradniku stylu Google. Oba te poradniki nie są identyczne i czasami zawierają sprzeczne porady. Najważniejsze jest, aby wybrać jeden odpowiadający piszącemu kod styl i się go konsekwentnie trzymać.
2.4.1 Nazwy obiektów
Istnieje wiele konwencji nazywania obiektów20.
Najczęściej używaną konwencją w R jest tzw. “snake case”.
Polega ona na tworzeniu nazw obiektów składających się ze słów połączonych znakiem podkreślenia (_
).
Ważne, żeby nazwy obiektów ułatwiały zrozumienie ich zawartości.
# obiekt
bok_a
bok_b
# funkcja
pole_prostokata()
Nazwa obiektu nie może zaczynać się od liczby, ani nie może używać specjalnych symboli, tj. ^
, !
, $
, @
, +
, -
, /
, czy *
.
Dodatkowo należy uważać, żeby nowa nazwa obiektu nie nadpisała istniejącego obiektu lub funkcji.
Nie powinno nazywać się obiektów tak jak istniejące funkcje, np. c
, t
, table
, itd.
2.4.2 Odstępy
Odstępy pełnią bardzo ważną funkcję przy pisaniu kodu, podobnie jak odstępy przy pisaniu tekstu. Wyobraź sobie czytanie powieści, w której nie ma żadnych odstępów między słowami czy rozdziałami. Często mówi się, że “kod musi oddychać” - odstępy zwiększają czytelność kodu i pozwalają na jego szybsze zrozumienie oraz ułatwiają naprawienie występujących błędów.
Odstępy można uzyskać poprzez użycie spacji.
Spacje powinny być użyte po przecinkach, ale nigdy przed nimi.
Dodatkowo, większość operatorów (np. =
, +
, -
, ==
) powinna być otoczona przez spacje.
# Zalecane
mean(wartosc, na.rm = TRUE)
srednia = bok_a * bok_b
pole =
# Niewskazane
mean ( wartosc,na.rm=TRUE )
srednia=*bok_b pole=bok_a
Spacje należy również używać do tworzenia wcięć - każde z nich powinno się składać z dwóch spacji.
# Zalecane
function(x, y, z){
moja_funkcja = y / z
pod = x * pod
wynik =
wynik
}
# Niewskazane
function(x, y, z){
moja_funkcja = y / z
pod = x * pod
wynik =
wynik }
Warto także ograniczać długość każdej linii kodu, żeby nie przekraczała ona ok. 80 znaków. Dzięki temu możliwe jest szybkie przeczytanie kodu czy też jego wydrukowanie.
# Zalecane
moja_bardzo_wazna_funkcja("pierwszy argument",
bardzo_wazny_wynik =b = "drugi argument",
c = "trzeci argument")
# Niewskazane
moja_bardzo_wazna_funkcja("pierwszy argument", "drugi argument", "trzeci argument") bardzo_wazny_wynik =
2.4.3 Komentarze
Komentarze służą do wyjaśniania istotnych elementów kodu.
Do komentowania w języku R służy operator #
.
# Mój komentarz
2.4.4 Nazwy plików
Nazwy plików powinny spełniać trzy wymagania - być łatwe (i) do odczytania przez komputer, (ii) do odczytania przez człowieka, (iii) do posortowania.
Nazwy plików nie powinny zawierać spacji, znaków specjalnych (np. !, %, *), znaków diakrytycznych (np. ć, Ł, ź). Warto też aby nazwy plików składały się tylko z małych liter.
# Zalecane
-sredniej.R
obliczanie-temperatury.csv
pomiary
# Niewskazane
Obliczanie Średniej.R!.csv pomiaryTemperatury
Podobnie jak nazwy obiektów, również nazwy plików powinny opisywać ich zawartość.
# Zalecane
-sredniej.R
obliczanie-temperatury.csv
pomiary
# Niewskazane
kod.R dane.csv
Dodatkowo wskazane jest dodanie wartości numerycznych przed nazwą pliku, jeżeli pliki mają jakąś kolejność.
# Zalecane
01_przygotowanie-danych.R
02_obliczanie-sredniej.R
# Niewskazane
-danych.R
przygotowanie-sredniej.R obliczanie
2.4.5 Daty
Istnieje wiele sposobów zapisu dat21, co może powodować różnorodne problemy przy programowaniu oraz analizie danych. Z ratunkiem w tej kwestii przychodzi norma ISO 8601, która definiuje daty kalendarzowe jako YYYY-MM-DD, czyli ROK-MIESIĄC-DZIEŃ.
# Zalecane
2019-06-02
# Niewskazane
wszelkie inne
2.5 Dodatkowe materiały
Polskie książki:
- http://www.biecek.pl/R/ (Biecek 2014)
- https://github.com/gagolews/Programowanie_w_jezyku_R/ (Gagolewski 2016)
- https://helion.pl/ksiazki/jezyk-r-kompletny-zestaw-narzedzi-dla-analitykow-danych-hadley-wickham-garrett-grolemund,jezrko.htm#format/d (Wickham and Grolemund 2016)
- https://helion.pl/ksiazki/wydajne-programowanie-w-r-praktyczny-przewodnik-po-lepszym-programowaniu-gillespie-colin-lovelace-robin,a_0491.htm#format/d (Gillespie and Lovelace 2016)
- https://bookdown.org/nowosad/geostatystyka/ (Nowosad 2019)
- http://www.enwo.pl/przetwarzanie/index.html (Czernecki 2018)
Angielskie książki:
- https://rstudio-education.github.io/hopr/ (Grolemund 2014)
- https://r4ds.had.co.nz/ (Wickham and Grolemund 2016)
- https://csgillespie.github.io/efficientR/ (Gillespie and Lovelace 2016)
- https://rstats.wtf/ (Jennifer Bryan and Hester 2019)
- https://adv-r.hadley.nz (Wickham 2014)
- https://geocompr.robinlovelace.net/ (Lovelace, Nowosad, and Muenchow 2019)
Blogi:
- Agregator blogów dotyczących R - https://www.r-bloggers.com/
- Polski blog opisujący kwestie analizy danych w R, wizualizacji, oraz edukacji - http://smarterpoland.pl/
- Polski blog pokazujący zastosowanie R do analizy i wizualizacji danych - http://szychtawdanych.pl/
Kursy:
- Polskie tłumaczenie pakietu R służącego do nauki tego języka - https://github.com/dabrze/swirl
- Lista kursów dotyczących R na platformie Coursera - https://www.coursera.org/courses?query=r
- Lista kursów dotyczących R na platformie edX - https://www.edx.org/course?search_query=r
Serwisy internetowe:
- Wyszukiwarki internetowe są nieocenionym narzędziem wspierającym programowanie - https://rseek.org/, https://duckduckgo.com/, https://www.google.com/, https://www.bing.com/, itd.
- Serwis społecznościowy zawierający pytania i odpowiedzi dotyczące różnych języków programowania w tym R - https://stackoverflow.com. Pytania dotyczące R można znaleźć pod adresem https://stackoverflow.com/questions/tagged/r. Przed zadaniem nowego pytania warto wyszukać czy nie zostało ono zadane wcześniej a następnie przeczytać wątek dotyczący tworzenia nowych pytań - https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example
- Twitter jest miejscem, w którym można znaleźć zarówno nowości z języka R, jak również odpowiedzi na pytania dotyczące tego języka - https://twitter.com/.
Kwestie związane z R są opatrzone hasztagiem
#rstats
, natomiast kwestie przestrzenne w R są opisywane hasztagami#rspatial
oraz#geocompr
- Elektroniczny biuletyn R Weekly zbierający co tydzień nowości związane z r - https://rweekly.org/
- Lista emailowa dotycząca R - https://stat.ethz.ch/mailman/listinfo/r-help
- Lista emailowa dotycząca kwestii przestrzennych w R - https://stat.ethz.ch/mailman/listinfo/r-sig-geo
- Forum dotyczące kwestii R i RStudio - https://community.rstudio.com/
Meetups (spotkania początkujących i zaawansowanych użytkowników R):
- Poznań - https://www.meetup.com/pl-PL/Poznan-R-User-Group-PAZUR/
- Warszawa - https://www.meetup.com/pl-PL/Spotkania-Entuzjastow-R-Warsaw-R-Users-Group-Meetup/
- Wrocław - https://www.meetup.com/Wroclaw-R-Users-Group/
- Kraków - https://www.meetup.com/erkakrakow/
- Trójmiasto - https://www.meetup.com/Trojmiejska-Grupa-Entuzjastow-R/
2.6 Zadania
Rozwiązując poniższe zadania oraz pozostałe zadania z tej książki staraj się stosować do stylu podanego w sekcji 2.4.
- Przejrzyj poniższą listę poleceń. Spróbuj określić uzyskane wyniki bez wykonywania kodu w R.
7
x = -2
y =+ 3
x - 5
y * 2
x / 4
y %% 3
x %/% 3
x ^ 2
y ^ x y
- Jedziesz na krótkie wakacje i planujesz na nie zabrać 500 EUR. Aktualny kurs kupna EUR wynosi 4,31. Ile PLN musisz wydać? Wylicz to w R.
- Masz trapez o długości podstaw
a = 5
ib = 6
oraz wysokościh = 3
. Stwórz nowy obiektpole_trapezu
, który zawiera obliczone pole tego trapezu. - Wraz z grupą znajomych planujesz zamówić pizzę z dostawą i macie na to przeznaczonych 60 PLN. Pizza o średnicy 30 cm kosztuje 28,5 PLN, a pizza o średnicy 50 cm kosztuje 60 PLN. Wylicz w R, czy bardziej opłaca się kupno dwóch małych pizz czy jednej dużej.
- Przejrzyj linki zawarte w tym rozdziale, w szczególności R-bloggers i R Weekly. Znajdź jeden lub dwa przykłady zastosowania R, które uważasz za ciekawe lub interesujące.
Bibliografia
Biecek, Przemyslaw. 2014. Przewodnik Po Pakiecie R. Oficyna Wydawnicza GIS.
Bryan, Jennifer, and Jim Hester. 2019. What They Forgot to Teach You About R.
Czernecki, Bartosz. 2018. Metody Przetwarzania Danych Meteorologicznych W Języku Programowania R.
Gagolewski, Marek. 2016. Programowanie W Jezyku R. Wydawnictwo Naukowe PWN.
Gillespie, Colin, and Robin Lovelace. 2016. Efficient R Programming: A Practical Guide to Smarter Programming. " O’Reilly Media, Inc.".
Grolemund, Garrett. 2014. Hands-on Programming with R: Write Your Own Functions and Simulations. " O’Reilly Media, Inc.".
Lovelace, R, J Nowosad, and J Muenchow. 2019. Geocomputation with R. Chapman and Hall/CRC Press.
Nowosad, Jakub. 2019. Geostatystyka W R. Poznan: Space A.
Peng, Roger D., Sean Kross, and Brooke Anderson. 2017. Mastering Software Development in R.
Wickham, Hadley. 2014. Advanced R. Chapman and Hall/CRC.
Wickham, Hadley, and Garrett Grolemund. 2016. R for Data Science: Import, Tidy, Transform, Visualize, and Model Data. " O’Reilly Media, Inc.".
To jest tzw. tryb interaktywny. Istnieje również tryb skryptowy, o którym więcej informacji można znaleźć w kolejnym rozdziale.↩︎
Jest to pewne uproszczenie - https://adv-r.hadley.nz/names-values.html#binding-basics.↩︎
Więcej informacji na temat różnic w działaniu tych operatorów można znaleźć na stronie https://stackoverflow.com/questions/1741820/what-are-the-differences-between-and-in-r.↩︎
https://en.wikipedia.org/wiki/Naming_convention_(programming)↩︎