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 provádělo tutéž operaci pořád dokola, dokud nebude splněna určitá podmínka (ukončovací pravidlo). While cyklus slouží k ušetření času ve chvíli, kdy chceme provádět tutéž operaci opakovaně a zároveň není jasné, kolikrát přesně ji chceme udělat (pokud bychom to věděli, lépe by se hodil For cyklus).

Příklad 1

Budete-li postupně sčítat čísla 1 + 2 + 3 + 4 + 5 … a tak dále, dostanete dříve nebo později čtyřciferný výsledek. Pomocí while cyklu zjistěte, jaké je poslední číslo, které musíte přičíst, než dostanete čtyřciferný výsledek.

Nejprve si vytvoříme dvě pomocné proměnné. Nazveme je třeba cislo a soucet. Na začátku oběma proměnným přiřadíme hodnotu 0.

> cislo = 0
> soucet = 0

Do proměnné cislo budeme postupně ukládat aktuálně přičítané číslo (v prvním běhu cyklu to bude jednička, ve druhém běhu cyklu dvojka atd.). Do proměnné součet budeme postupně ukládat aktuální součet (v prvním běhu bude roven 1, ve druhém 3 atd.). Tento součet budeme v každém běhu cyklu navyšovat, dokud nebude čtyřciferný. Pak se procedura zastaví.

Samotný cyklus bude vypadat následovně:

while(soucet < 1000){
  cislo = cislo + 1
  soucet = soucet + cislo
}

První řádek říká, že se určitá operace bude opakovat, dokud bude proměnná soucet menší než 1000 (tzn. dokud bude trojciferným číslem).

V kudrnatých závorkách se nachází samotná operace, která se provede při každém opakování cyklu. Konkrétně jde o tuto operaci:

Proměnná cislo se navýší o jedničku.

Ke stávajícímu součtu se toto číslo přičte.

V prvním běhu cyklu se proměnná cislo změní z nuly na jedničku a o tuto jedničku se pak navýší aktuální součet, který bude tedy roven 1. Ve druhém běhu cyklu se proměnná cislo změní z jedničky na dvojku a o tuto dvojku se pak navýší aktuální součet, který bude tedy roven 3 (1 + 2 = 3). A tak dále…

Jakmile cyklus doběhne, bude v proměnné cislo obsaženo poslední číslo, které jsme přičítali.

Snadno můžete zjistit, že se jedná o číslo 45.

> cislo
[1] 45

Příklad 2

Uvažujte skupinu, kde je 45 mužů a 5 žen. Vybírejte postupně náhodně jednu osobu. Na kolikátý pokus jste vybrali ženu? (tutéž osobu můžete vybrat i opakovaně, tzn. vybranou osobu vracíte zpět do skupiny)

Nejprve si vytvoříme popsanou skupinu a uložíme ji například do proměnné skupina. Skupina má obsahovat 45 mužů a 5 žen. Muže zakódujeme jako 0, ženu jako 1. Proměnná skupina bude tedy vypadat následovně:

> skupina = c(rep(0, 45), rep(1, 5))
> skupina
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1

Pak si vytvoříme pomocnou proměnnou kolikrat, do níž budeme ukládat, kolikrát již cyklus proběhl. Na začátku ji nastavíme na nulu.

Dále si vytvoříme proměnnou vybrany, do které budeme v každém běhu cyklu ukládat pohlaví vybrané osoby (tedy číslo 0 nebo 1). Na začátku ji nastavíme na nulu.

> kolikrat = 0
> vybrany = 0

Samotný cyklus pak bude vypadat následovně.

while(vybrany == 0) {
  kolikrat = kolikrat + 1
  vybrany = sample(skupina, 1)
}

První řádek říká, že určitou operaci budete opakovat, dokud se proměnná vybrany rovná nule (čili dokud nebyla vybrána žena).

V kudrnatých závorkách se nachází samotná operace, která se provede při každém opakování cyklu. Konkrétně jde o tuto operaci:

Proměnná kolikrat se navýší o jedničku, protože probíhá další jeden běh cyklu.

Ze skupiny se náhodně vybere jeden člověk (což zařídí příkaz sample(skupina, 1)), jehož pohlaví se uloží do proměnné vybrany.

Jakmile se cyklus ukončí, můžete se podívat do proměnné kolikrat, abyste zjistili, kolikrát cyklus proběhl. Protože procedura obsahuje náhodný výběr, můžete dostat různá čísla, v našem jednom konkrétním případě jsme dostali číslo 12 (tzn. na dvanáctý pokus jsme při náhodném výběru ze skupiny zvolili ženu).

> kolikrat
[1] 12

S tímto tématem se setkáte na našich kurzech ExcelTown.
Aktuálně: kurzy můžete absolvovat jak online, tak prezenčně.

Napsat komentář

Vaše emailová adresa nebude publikována.

*

smazat formulářOdeslat komentář