I
42
Łagodne wprowadzenie do R
Przyśpieszamyr
43
Can one be a gootl data analyst without being a half-good programmer? The ahort answer to that te, 'No.' The long answer to that te, ’No.’
Frank Harrcll fortune(52)
Autor spodziewa się, że czytelnik nie wierzy na słowo, tylko sprawdzi jakim komunikatem zakończy się wpisanie tych Doleceń.
1.6 Przyśpieszamy
Po lekturze tego rozdziału czytelnik będzie już całkowicie gotów do korzystania z R. % W kolejnych podrozdziałach przedstawimy składnię języka R, funkcje do operacji na J danych, wprowadzenie do grafiki oraz podstawowe statystyki opisowe. Zakładamy, * że czytelnik opanował materiał przedstawiony w poprzednich podrozdziałach.
1.6.1 Instrukcje warunkowe i pętle
Wiemy już jak pisać proste programy, w których instrukcje wykonywane są jedna po drugiej. Korzystając z ir wykonywania programu
drugiej. Korzystając z instrukcji warunkowych i pętli możemy sterować przepływem -tM
1.6.1.1 Instrukcja warunkowa if ... else ...
W języku R, tak jak w większości języków programowania, mamy możliwość korzy-stania z instrukcji if else. Umożliwia ona warunkowe wykonanie fragmentu kodu w zależności od prawdziwości pewnego warunku logicznego. Składnia instrukcji if else jest następująca:
if
(war)
instrl
» luft if (war)
instrl else instr2
Fragment instrukcji warunkowej począwszy od słowa else jest nieobowiązkowy. Jeżeli wartość warunku logicznego war jest prawdziwa (logiczna równa TRUE lub liczbowa różna od 0), to wykonana zostanie instrl, jeżeli nie, to wykonana będzie instr2 (o ile podano wariant z else). Zarówno instrl jak i instr2 mogą być zastąpione blokiem instrukcji (instrukcjami otoczonymi nawiasami {>).
Zobaczmy, jak to wygląda na poniższym przykładzie.
> liczba = 1313
> tt zapis ’liczba */,’/. 3 — 0’ oznacza sprawdzenie, czy reszta z dzielenia
prez 2 ma wartość 0, jeżeli tak jest, to to wyrażenie przyjmuje J
wartość TRUE, w przeciwnym razie wartość FALSE
> if (liczba V. 2 *» 0) {
+ cat("ta liczba jest parzysta\n")
+ > else {
+ catCta liczba jest nieparzystaW)
+ }
ta liczba jest nieparzysta
Należy uważać, by słowo kluczowe else nie rozpoczynało nowej linii. Błędem
zakończy się następujący ciąg poleceń:
■; p wersja nie będzie działała
if (i‘-0)
‘K. cat(“to nie może być prawda")
pi
a cat("C0 się wyświetli?")
Dlaczego? Jak pamiętamy R to język interpretowany. Po zakończeniu drugiej linii tego przykładu interpreter nie spodziewu się kolejnych instrukcji, dlatego wykona (w jego mniemaniu już kompletną) instrukcję warunkową. Przechodząc do trzeciej linijki o instrukcji if już nie pamięta, dlatego zostanie zgłoszony błąd składni. Poprawne użycie instrukcji if z wariantem else jest następujące:
># ta wersja będzie działała 'if (1-0) {
£t’ cat("to nie może być prawda")
> else {
f cat("co się wyświetli?")
gip. ' >
:S podobnie jak ta lf (1—0)
cat(“to nie może być prawda") else cat("co się wyświetli?")
1.6.1.2 Funkcja ifelse(base)
Powyżej omówiona instrukcja warunkowa bierze pod uwagę wartość tylko jednego warunku logicznego. Funkcja ifelseO pozwala na wykonanie ciągu działań w zależności od wektora warunków logicznych. Składnia tej funkcji jest następująca:
ifelse(war, Instrl, instr2)
Warunek war może być jedną wartością logiczną lub wektorem wartości logicznych. W wyniku wykonania tej funkcji zwrócona zostanie wartość lub wektor. Wynik będzie miał wartości opisane przez Instrl w pozycjach odpowiadających wartości TRUE wektora war oraz wartości opisane przez instr2 w pozycjach odpowiadających wartości FALSE wektora war. Prześledźmy wyniki poniższych przykładów.
> # pierwszy argument jest wektorem
> ifelse(1:8 < 5, "mniej", "wiecej")
(1] “mniej" "mniej" "mniej" "mniej" "wiecej" "wiecej" "wiecej" "wiecej"
>,# wszystkie argumenty są wektorami
> ifelse(sin(l:5)>0, (1:6)*2, (1:5)“3)
UJ 1 4 9 64 125
> » wszystkie argumenty to pojedyncze wartości
> ifel3e(l—2, " cos jest nie tak", "uff")
UJ “uff"
Ale uwaga! Jeżeli te instrukcje znalazłyby się w ciele funkcji, to błąd nie zastałby zgłoszony, wszystl by działało!
'i
Interpreter to program interpretujący instrukcje zapisań* w języku programowania na rozkazy rozumiano przez procesor. Interpreter języka' jest integralną częścią platformy
I
i
i
$ i