R Zatímco smyčka s příklady programování
⚡ Chytré shrnutí
Cyklus While v programování v R opakuje blok kódu tak dlouho, dokud jeho podmínka zůstává PRAVDIVÁ. Podmínka je testována před každým průchodem, takže tělo cyklu se nemusí nikdy spustit a něco uvnitř cyklu musí nakonec podmínku změnit na NEPRAVDIVOU.
Zatímco smyčka v R programování
A zatímco smyčka v R opakuje blok kódu tak dlouho, dokud jeho podmínka zůstává PRAVDA. Podmínka je testována před v každém průchodu, takže smyčka while se může spustit nulakrát, pokud je podmínka od začátku NEPRAVDA.
Zatímco syntaxe smyčky v R
Následuje syntaxe programování While Loop in R:
while (condition) {
Exp
}
R Zatímco smyčkový vývojový diagram

HodnoceníNěco uvnitř smyčky musí nakonec způsobit, že podmínka bude NEPRAVDA. Pokud se nic nestane, smyčka běží donekonečna a je nutné R přerušit stisknutím klávesy Esc nebo Ctrl+C.
Smyčka while vs. for Smyčka vs. repeat Smyčka v R
R nabízí tři toaletyping konstrukty a výběr mezi nimi závisí na tom, zda předem víte, kolik iterací potřebujete.
| Kritéria | zatímco | for | opakovat |
|---|---|---|---|
| Počet iterací | Předem neznámé | Předem známé | Předem neznámé |
| Testovaný stav | Před každým průchodem | Sekvence je vyčerpána | Nikdy, musíš zavolat přestávku |
| Minimální počet běhů | Nulu | Nulu | Jedna |
| Typické použití | Sbíhající se na prahu | Chůze po vektoru nebo seznamu | Logika stylu Do-while |
| Syntax | zatímco (podmínka) { } | pro (i ve v) { } | opakovat { … přerušit } |
# repeat always runs at least once count <- 1 repeat { print(count) count <- count + 1 if (count > 5) break }
Výše uvedený příklad akcií je přirozeným řešením pro dobu trvání: nemůžete předem vědět, kolik náhodných tahů bude potřeba, než cena klesne na 45.
Cyklus While v R: Příklady
Příklad 1
Začněte s tím nejjednodušším možným Programování R. příklad. Vytvoříte čítač a při každém průchodu k němu přičtete 1. Smyčka musí být schopna ukončit, takže podmínka explicitně říká R, aby se zastavil, jakmile proměnná dosáhne hodnoty 10.
Hodnocení: Pokud chcete vidět hodnotu aktuální smyčky, musíte proměnnou zabalit do funkce print().
#Create a variable with value 1 begin <- 1 #Create the loop while (begin <= 10){ #See which loop we are on cat('This is loop number', begin, '\n') #add 1 to the variable begin after each loop begin <- begin+1 print(begin) }
Výstup:
## This is loop number 1[1] 2 ## This is loop number 2[1] 3 ## This is loop number 3[1] 4 ## This is loop number 4[1] 5 ## This is loop number 5[1] 6 ## This is loop number 6[1] 7 ## This is loop number 7[1] 8 ## This is loop number 8[1] 9 ## This is loop number 9[1] 10 ## This is loop number 10[1] 11
Příklad 2
Předpokládejme, že jste si koupili akcie za 50 dolarů. Pokud cena klesne na 45 dolarů nebo níže, chcete je prodat nakrátko, jinak akcie držíte. Každý průchod smyčkou náhodně posouvá cenu až o 10 dolarů v obou směrech kolem 50 dolarů:
set.seed(123) # Set variable stock and price stock <- 50 price <- 50 # Loop variable counts the number of loops loop <- 1 # Set the while statement while (price > 45){ # Create a random price between 40 and 60 price <- stock + sample(-10:10, 1) # Count the number of loop loop <- loop + 1 # Print the number of loop print(loop) }
Výstup:
## [1] 2 ## [1] 3 ## [1] 4 ## [1] 5 ## [1] 6 ## [1] 7
cat('it took',loop,'loop before we short the price. The lowest price is',price)
Výstup:
## it took 7 loop before we short the price. The lowest price is 40
Jak používat break a next ve smyčce While
Dvě klíčová slova mění normální tok libovolné smyčky R.
- rozbít okamžitě ukončí smyčku, přeskočíping každá zbývající iterace.
- další opustí pouze aktuální iteraci a přejde rovnou k dalšímu testu podmínky.
# break: stop as soon as a condition is met i <- 1 while (i <= 100) { if (i * i > 50) { cat('First square above 50 is', i * i, '\n') break } i <- i + 1 } # next: skip the even numbers i <- 0 while (i < 10) { i <- i + 1 if (i %% 2 == 0) next print(i) }
Jedna past, kterou stojí za to znát. Ve smyčce while se funkce next vrátí zpět k testu podmínky. bez spouštění čehokoli pod ním. Pokud je váš čítač inkrementován ve spodní části těla, smyčka tento inkrement přeskočí a navždy se zasekne. Proto se druhý příklad inkrementuje před další výrok, nikoli až po něm.
Běžné chyby smyčky While a nekonečné smyčky
Čtyři chyby jsou zodpovědné za téměř každou neúspěšnou smyčku while.
- Počítadlo se nikdy neaktualizuje. Zapomenutí inkrementace ponechá podmínku trvale PRAVDA. Stisknutím klávesy Esc v RStudio nebo Ctrl+C v terminálu přerušíte operaci.
- Podmínka vrací hodnotu NA. Pokud je jakákoli hodnota v testu NA, R se zastaví s chybou „chybějící hodnota tam, kde je potřeba TRUE/FALSE“. Chraňte ji pomocí is.na() nebo isTRUE().
- Podmínka je delší než jeden prvek. Od verze R 4.2 je podmínka s délkou větší než jedna spíše chybou než varováním. Zabalte ji do funkce any() nebo all().
- Porovnání s plovoucí desetinnou čárkou se nikdy nestane NEPRAVDA. Funkce while (x != 0.3) se může opakovat donekonečna, protože 0.1 + 0.2 není přesně 0.3. Porovnejte to s tolerancí, například abs(x – 0.3) > 1e-8.
# Safety valve: cap the number of iterations iter <- 0 while (price > 45 && iter < 1000) { price <- stock + sample(-10:10, 1) iter <- iter + 1 }
Přidání maximálního počtu iterací je levnou pojistkou v jakékoli smyčce, jejíž ukončení závisí na náhodných nebo externích datech.

