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.

  • 🔁 Základní syntaxe: while (podmínka) { výraz } nejprve testuje podmínku a tělo spustí pouze tehdy, když se vyhodnotí jako PRAVDA.
  • ⚠️ Pravidlo pro ukončení: Příkaz uvnitř těla smyčky musí změnit podmínku, jinak smyčka nikdy nekončí.
  • 🔢 Vzor počítadla: Inicializujte proměnnou před smyčkou a uvnitř ji inkrementujte, což je standardní idiom počítání.
  • 🛑 Řízení toku: Příkaz break okamžitě ukončí smyčku a příkaz next přeskočí na následující iteraci.
  • 🔁 Opakovat Alternativa: Funkce repeat běží bezpodmínečně a spoléhá se výhradně na příkaz break, což vyhovuje logice stylu do-while.
  • 📐 Kdy si vybrat: Použijte funkci while, když je počet iterací předem neznámý, a funkci for, když je pevně stanovená.

Cyklus While v R

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

R Zatímco smyčkový vývojový diagram
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.

Nejčastější dotazy

Smyčka while testuje svou podmínku před prvním průchodem, takže se může spustit nulakrát. Smyčka repeat nemá žádnou podmínku a vždy se spustí alespoň jednou a ukončí se pouze tehdy, když dosáhne příkazu break.

Stisknutím klávesy Esc v RStudio nebo Ctrl+C v terminálu přerušíte provádění. Této situaci předejdete tím, že nějaký příkaz v těle příkazu změní podmínku, a přidáním maximálního čítače iterací.

Použijte funkci while, když počet iterací závisí na výsledku vypočítaném uvnitř smyčky, například čekání na překročení prahové hodnoty. Použijte funkci for, když je sekvence známa před spuštěním smyčky.

Iterační algoritmy, jako je gradientní sestup, k-průměry a maximalizace očekávání, běží až do konvergence, nikoli pro pevný počet, což je přesně vzorec while.

Ano. Asistenti s umělou inteligencí dokáží rozpoznat chybějící aktualizaci počítadla nebo podmínku, která se nikdy nemůže změnit na NEPRAVDU. Vždy přidejte příkaz print nebo omezení iterací, abyste diagnózu potvrdili na vlastních datech.

Shrňte tento příspěvek takto: