przewodnikPoPakiecieR6

przewodnikPoPakiecieR6



■II l.iiHodne wprowadzenie do R

1.(1.1.3 Funkcja switch(base)

m


W przypadku omówionych powyżej instrukcji warunkowych, mieliśmy do czynienia z warunkiem logicznym, który mógł być prawdziwy lub fałszywy. Jednak w pewnych sytuacjach zbiór możliwych akcji, które chcemy wykonać jest większy, sytuacjach sprawdza się instrukcja warunkowa switchO o następującej składni:

switchCklucz, wartości « akcjal, wartosc2 = akcja2, ...)

Pierwszy argument powinien być typu znakowego lub typu wyliczeniowego factor.

W zależności od wartości tego argumentu jako wynik zostanie zwrócona wartość otrzymana w wyniku wykonania odpowiedniej akcji. W poniższym przykładzie spraw- :i dzamy jaka jest klasa danej zmiennej i w zależności od tego wykonujemy jeJ— z wielu możliwych akcji.

>    dane = 1313

>    # w poniższej instrukcji sprawdzana jest klasa zmiennej dane, ta klas

to 'numeric', ponieważ zmienna 'dane' przechowuje liczbę, dlatego też wykona śjĄ wyłącznie druga akcja

>    svitcb(class(dane),

+    logical = ,

+    numeric = catCtyp liczbowy    lub logiczny"),

+    factor = catCtyp czynnikowy"),

+    eat("trudno określić")

+■■)■■■

typ liczbowy lub logiczny

Jeżeli wartość klucza (pierwszego argumentu funkcji switchO) nie pasuje do etykiety żadnego z kolejnych argumentów, to wynikiem instrukcji switchO jest wartość argumentu nie nazwanego (czyli domyślną akcją w powyższym przykładzie jest wyświetlenie napisu "trudno określić"). Jeżeli wartość klucza zostanie dopasowana do etykiety jednego z kolejnych argumentów, ale nie jest podana żadna związana z nim akcja, to wykonana zostanie akcja dla kolejnego argumentu. Innymi słowy, jeżeli klucz mihłby wartość "logical", to ponieważ nie jest wskazana wartość dla argumentu logical” zostanie wykonana akcja wskazana przy kolejnej z etykiet, czyli "numeric".

I


/


Argumenty funkcji switchO korzystają z mechanizmu leniwego warto-,/S.^ ściowania (ang. lazy evaluation, więcej informacji nt. tego mechanizmu 'V /■'' przedstawimy w podrozdziale 2.1.9). Zwykłe przekazywanie argumentów SP funkcji polega na wyznaczeniu wartości kolejnych argumentów i na przekazaniu do funkcji wyłącznie wyznaczonych wartości. Gdyby tak było w powyższym przykładzie, to przed wywołaniem funkcji switchO wyznaczone byłyby wartości wszystkich argumentów, czyli wykonane byłyby wszystkie funkcje cat(). Tak się jednak (na szczęście) nie dzieje, ponieważ w tym przypadku argumenty przekazywane są w sposób leniwy i funkcja switchO sama decyduje, którą z instrukcji wykonać (wartość którego z argumentów wyznaczyć).

1.6.1.4 Pętla for

Najpopularniejszą pętlą w większości języków programowania jest pętla for. W języku R ta pętla również jest dostępna, ule korzysta się inaczej niż w większości języków programowania. Poniżej przedstawiamy składnię pętli for.

i.jfor (zmień in wekt)

?//':    instr

Jeżeli chcemy w każdym wykonaniu pętli wykonać więcej poleceń, to instr można zastąpić blokiem instrukcji. Ta instrukcja lub blok instrukcji będzie wykonana tyle razy ile elementów ma wektor wekt. Zmienna zmień w każdym okrążeniu pętli przyjmować będzie kolejną wartość z tego wektora. Zacznijmy od przykładu.

>    tt ta pętla wykona się dla każdego elementu wektora 1:Ą

>    tor (i in 1:4) {

+    cat(pastę("aktualna wartość i to ", i, "\n"))

aktualna wartość i to 1 aktualna wartość i to 2 aktualna wartość i to 3 aktualna wartość i to 4

Co Więcej, wekt nie musi być wektorem, może być listą, której elementy są różnego typu!


Elementy wektora wekt mogą być dowolnego typu. Poniżej umieszczamy przy kład, w którym indeks funkcji przebiega po wartościach wektora napisów.

>    indeksy * c("jabłka","gruszki","truskawki","pomarańcze")

>    ż ta pętla wykona się dla każdego elementu wektora ’indeksy'

>    for (i in Indeksy) {

+ cat(paste(i, ”\n"))

if > jabłka gruszki truskawki pomarańcze

Pętla for nie wymaga, by elementy wek były różne, ale warto o to zadbać. Ułatwia to śledzenie ewentualnych błędów, wystarczy bowiem wypisać, w którym kroku pętli wystąpił błąd. W większości przypadków wygodnie jest za wekt podać wektor kolejnych liczb całkowitych. Umożliwia to zapisywanie wyników z kolejnych okrążeń pętli w wektorze lub w macierzy.

W wielu sytuacjach do wyznaczania wektora indeksów pętli wygodnie jest się posłużyć funkcją seq_along(base). Argumentem tej funkcji jest, wektor dowolnych wartości a wynikiem jest wektor kolejnych liczb naturalnych od 1 do długości wektora będącego argumentem. Poniższy kod będzie miał identyczny wynik jak przykład z owocami powyżej ale pętla indeksowana jest, liczbami naturalnymi. Posługując się liczbowym indeksem i możemy wyniki zapisywać do macierzy lub innego obiektu, którego nie można indeksować nazwami owoców


Wyszukiwarka

Podobne podstrony:
przewodnikPoPakiecieR4 I.iiimim’ wprowadzenie do R korzystając z funkcji invisible(base). Działanie
przewodnikPoPakiecieR3 58 Łagodne wprowadzenie do R Wariacje z funkcją ablinef) •tó Rysunek 1.6: Pr
przewodnikPoPakiecieR2 16 Łagodne wprowadzenie do R -    R functions (text) Pomoc do
przewodnikPoPakiecieR5 22 Łagodne wprowadzenie do R Thbela 1.3: Lista funkcji arytmetycznych z paki
przewodnikPoPakiecieR9 50 Łagodne wprowadzenie do R Wt*p
i—i MMMMMM O Wprowadzenie do algorytmów.
przewodnikPoPakiecieR0 ” litu i iifiui wprowadzenie do R vjy 9 Konwertując obiekty typu wyliczeniow
PB081404 II Rzeczpospolita Wprowadzony do obiegu 29 kwietnia 1924 r. w wyniku reformy pieniężnej&nbs
Gospodarka Nieruchomościami - studia II stopniaWykład 1 - Wprowadzenie do gospodarki nieruchomościam
77365 przewodnikPoPakiecieR0 ” litu i iifiui wprowadzenie do R vjy 9 Konwertując obiekty typu wylic
przewodnikPoPakiecieR3 38 Łagodne wprowadzenie do R 38 Łagodne wprowadzenie do R generowana jest se
2009? KOLOKWIUM II-B 2 ZIMA 20091. Do funkcji wynagrodzeń zalicza sie: FUNKCJE SPOŁECZNĄ

więcej podobnych podstron