Łagodne wprowadzenie do li użyć funkcji match(base). Działu mm zim< /ule N/.yliclcJ niż odpowiednia instrukcja zapisana z użyciem funkcji whichO. 1'mlnlnin działanie do funkcji matchO ma binarny operator '/.in*/,. Jego wynikiem jest wektoi wartości logicznych określających, czy jakikolwiek element argumentu prawego wystąpił w danym elemencie argumentu lewego (patrz poniższy przykład).
Jeżeli chcemy znaleźć indeks elementu minimalnego lub maksymalnego w wektorze, to możemy skorzystać z funkcji whlch.min(base), which.raax(base). Ich wynikami są indeksy pierwszego ekstremum.
> wektor - cUl, 13, 10.5, -3, 11, -3)
> vhich(vektor*=*10.5)
[1] 3
> match(c(ll,10.5,-3), wektor)
> which(wektor<ll)
Cl]’3 4 6
> wbichfwektor -- min(wektor)) # które najmniejsze
> whicb.max(wektor) # który największy
> which.min(wektor) * który najmniejszy
> # zmienna LETTERS to 26-elementowy wektor dużych liter
> LETTERS '/.in'/, c("A", "Z", "M", "G")
[1] TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
Cli] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE C21] FALSE FALSE FALSE FALSE FALSE TRUE
1.5.6.5 Operatory
W tabeli 1.6 przedstawiono najpopularniejsze operatory w języku R. Dla większości operatorów istnieją również funkcje o identycznym działaniu, ale mniej wygodnym zapisie. Np. wyrażenie 2+3 jest równoważne wyrażeniu sum(2,3). Można również definiować własne operatory, co opiszemy w podrozdziale 1.6.2.5.
Tabela 1.6: Lista operatorów logicznych i arytmetycznych
Standardowe operatory arytmetyczne. Oba argumenty powinny mieć taki sam wymiar (macierze lub wektory) lub jeden z argumentów powinien być liczbą. | |
'śx'ś |
Iloczyn Kroneckera dwóch macierzy. |
u |
Reszta modulo z dzielenia. |
Dzielenie całkowite. | |
•/.*•/. |
Iloczyn dwóch macierzy. |
! * Standardowo operatory porównywania wartości liczbowych. | |
! Operntor negacji. | |
b, bb, 1,11 |
Logiczny iloczyn oraz logiczna suma. |
anyO, all() |
Logiczna munn(llorzyu) wszystkich elementów wektora. |
Startujemy
37
Logiczna suma odpowiada łącznikowi lub a logiczny iloczyn łącznikowi i w języku polskim. Jeżeli ten komentarz dużo Ci nic rozjaśnił to znaczy, że nie potrzebujesz korzystać z tych operatorów i się nie przejmuj (preferujemy bezstresowy sposób nauczania ; >).
Operatory 4 i I służą do wykonywania operacji na listach lub wektorach, podczas gdy 44 i I I na pojedynczych wartościach. Warto przeanalizować, co się dzieje w poniższym przykładzie.
> 0 podajemy iwa wektory toartości logicznych, kolejne wartości są nazwane
> lubię. statystykę - cCala~FAt.SE. ola-TRUE, ewa=TRUE)
> łubie.prowadzącego « c(ala»TRUE, ola=TRUE, ewa-FALSE)
> 0 logiczne i dla kolejnych par elementów obu wektorów
> tubie.statystykę fc tubie.prowadzącego - ala ola ewa
FAI.SE TRUE FALSE
> 0 logiczne i dla wszystkich elementów obu wektorów
> tubie.statystykę kk tubie.prowadzącego [1] FALSE
> 0 logiczne lub dla kolejnych par elementów obu wektorów
> tubie.statystykę I łubie.prowadzącego ala ola ewa
TR(JE TRUE TRUE
> 0 logiczne lub dla wszystkich elementów obu wektorów
> tubie.statystykę II łubie.prowadzącego Cl] TRUE
> any(łubie.statystykę)
Ci] TRUE
Z uwagi na ochronę danych osobowych, imiona studentek w tym przykładzie zostały zmienione.
^ j ^ Pomiędzy operatorami I I (44) a I (4) istnieje jeszcze jedna różnica. ‘.— Operatory I i 4 stosują tak zwane „gorliwe wartościowanie", czyli wy-■"* znaczają wartości wszystkich argumentów tych operatorów a następnie wyznaczają logiczną sumę lub iloczyn. Operatory I I i 44 stosują tak zwane „leniwe wartościowanie”, czyli wyznaczają wartość drugiego argumentu, tylko jeżeli jest ona niezbędna do określenia wartości wyniku. W sytuacji, gdy pierwszy argument operatora 11 ma wartość TRUE (a dla operatora 44 wartość FALSE) nie jest wyliczany drugi argument, ponieważ wynik operatora jest już znany. Warto pamiętać o tych różnicach. Leniwe i gorliwe wartościowanie to przydatny mechanizm, ale może być też źródłem błędów.
> wypiszlmie <- functlon(imle) fcat(pastę(imię, "\n”)); T >
> wypiszImieCala”) I wypiszImieCola") ala
* Ola [i] TRUE
> wypiszlmie ("ala") I I wypiszImieCola") ala
tl) TRUE