For cykly v jazyce R
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.
Autor článku: Lenka Fiřtová
V tomto článku je popsán způsob, jak zařídit, aby R provedlo tutéž operaci několikrát za sebou, čili jak použít tzv. cyklus. Cykly slouží k ušetření času ve chvíli, kdy chceme provést stejnou operaci opakovaně.
Příklad 1
Příkaz sample(20) vytvoří náhodně seřazenou řadu čísel od 1 do 20. Vytvořte si takovou řadu s názvem y. Pak pomocí for cyklu nahraďte všechna jednociferná čísla v této řadě číslem o 20 větším (měli byste tedy ve výsledku dostat řadu čísel od 10 do 29).
Nejprve si vytvoříme popsanou řadu y a podíváme se, jak vypadá. Protože jde o náhodně seřazená čísla, vaše konkrétní řada bude pravděpodobně vypadat trochu jinak.
> y = sample(20) > y [1] 16 11 18 17 10 19 2 12 20 14 8 6 15 4 13 9 7 3 5 1
Nyní použijeme for cyklus, který bude vypadat následovně:
> for(i in 1:20) { if(y[i]<10 { y[i] = y[i] + 20 } }
Tento cyklus postupně prochází jedno číslo po druhém v řadě y a kontroluje, jestli je dané číslo jednociferné (menší než 10). Pokud ano, nahradí ho číslem o 20 větším.
V úvodu for cyklu je příkaz for(i in 1:20). Tento příkaz říká R-ku, kolikrát chceme cyklus provést. My zde konkrétně specifikujeme, že chceme cyklus provést dvacetkrát, a to pro i od jedné do dvaceti (1 : 20), přičemž i si můžeme představit jako „pomocnou“ proměnnou, která postupně nabývá hodnoty od 1 do 20. Místo písmena i lze použít jakýkoli zatím nevyužitý název proměnné (písmeno, slovo apod.).
V kudrnatých závorkách je specifikována požadovaná operace.
V prvním běhu cyklu je proměnná i nastavena na hodnotu 1. Následně proběhne operace, která je obsažena uvnitř cyklu. Ta bude pro i = 1 vypadat následovně:
> if(y[1]<10) { y[1] = y[1]+20
Jedná se o if podmínku, která ověří, jestli první číslo řady (y[1]) je menší než 10, a pokud ano, zvětší jej o 20.
Jakmile proběhne první cyklus, přenastaví se i na hodnotu dva a proces se opakuje až do chvíle, kdy i rovná se 20.
Podrobnější vysvětlení k podmínkám najdete zde.
Podrobnější vysvětlení k vektorům (řadám čísel) najdete zde.
Výsledný vektor po proběhnutí cyklu vypadá následovně:
> y [1] 16 11 18 17 10 19 22 12 20 14 28 26 15 24 13 29 27 23 25 21
Příklad 2
For cykly můžeme libovolně vnořovat do sebe. Ukažme si to na následujícím příkladu. Založíme si prázdnou proměnnou z.
> z = NULL
Do této proměnné postupně uložíme pro čísla 1, 2, 3, 4 a 5 jejich druhou, třetí a čtvrtou mocninu. Postupovat můžeme takto:
> for(i in 1:5) { for(j in 2:4) { z = c(z, i^i) } } z
Protože používáme dva for cykly, musíme mít dvě „pomocné“ proměnné, například i a j (pozor, každý for cyklus musí mít svoji vlastní).
První for cyklus říká, že pro i od jedné do pěti chceme provést určitou operaci. Druhý, vnořený for cyklus říká, že chceme provést určitou operaci pro j od dvou do čtyř (povšimněte si, že for cyklus není nutné zahajovat jedničkou).
Příkaz z = c(z, i^j) říká, že k proměnné z chceme „přilepit“ v daném běhu cyklu další číslo, a to konkrétně číslo i umocněné na číslo j.
Nejprve se tedy proměnná i nastaví na hodnotu 1 a tato jednička se postupně umocní na druhou, na třetí a na čtvrtou (tedy pro i =1 proběhne celý vnořený for cyklus). Následně se proměnná i nastaví na hodnotu 2 a tato dvojka se opět postupně umocní na druhou, na třetí a na čtvrtou. Totéž se pak zopakuje pro i rovno třem, čtyřem a pěti.
Výsledný vektor z má tedy následující podobu:
> z [1] 1 1 1 4 8 16 9 27 81 16 64 256 25 125 625
Na závěr je podstatné zmínit, že „pomocné“ proměnné mohou mít, jak vyplynulo z těchto příkladů, několik funkcí. Nabývají-li hodnoty počínaje jedničkou (např. viz výše i = 1 : 5), pak pomyslně označují, kolikátá smyčka cyklu probíhá. Lze ale stejně dobře využívat jejich konkrétní hodnoty (například ve chvíli, kdy má proměnná j hodnotu 3, můžeme s ní pracovat úplně stejně jako s číslem 3). A v neposlední řadě je lze využívat jako indexy, tedy k určení pořadí nějakého prvku (například pro i = 2 by y[i] vyfiltrovalo druhý prvek v pořadí ve vektoru y).
S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.