R Podczas pętli z przykładami programowania
⚡ Inteligentne podsumowanie
Pętla while w programowaniu R powtarza blok kodu tak długo, jak jego warunek pozostaje PRAWDZIWY. Warunek jest sprawdzany przed każdym przebiegiem, więc treść pętli może w ogóle się nie wykonać, a coś w jej wnętrzu musi ostatecznie sprawić, że warunek stanie się FAŁSZYWY.

Podczas pętli w programowaniu w języku R
A pętla while W R blok kodu jest powtarzany tak długo, jak długo jego warunek pozostaje PRAWDZIWY. Warunek jest testowany. zanim w każdym przejściu, więc pętla while może wykonać się zero razy, jeśli warunek od początku był FAŁSZYWY.
Podczas gdy składnia pętli w R
Poniżej przedstawiono składnię pętli While w programowaniu w języku R:
while (condition) {
Exp
}
R Podczas gdy schemat blokowy pętli

Note: coś w pętli musi ostatecznie sprawić, że warunek będzie FAŁSZ. Jeśli nic się nie stanie, pętla będzie działać w nieskończoność i trzeba będzie przerwać R klawiszem Esc lub Ctrl+C.
Pętla while vs pętla for vs pętla repeat w R
R oferuje trzy toaletyping konstrukcje, a wybór między nimi sprowadza się do tego, czy wiesz z góry, ile iteracji będzie potrzebnych.
| kryteria | jednocześnie | dla | powtarzać |
|---|---|---|---|
| Liczba iteracji | Nieznane z góry | Znane z góry | Nieznane z góry |
| Stan przetestowany | Przed każdym przejazdem | Sekwencja jest wyczerpana | Nigdy nie musisz mówić „przerwa” |
| Minimalne przebiegi | Zero | Zero | jeden |
| Typowe zastosowanie | Zbieżność na progu | Przechodzenie wektora lub listy | Logika stylu „do-while” |
| Składnia | podczas gdy (warunek) { } | dla (i w v) { } | powtórz { … przerwij } |
# repeat always runs at least once count <- 1 repeat { print(count) count <- count + 1 if (count > 5) break }
Powyższy przykład akcji jest naturalny: nie możesz z góry wiedzieć, ile losowań będzie potrzebnych, zanim cena spadnie do 45.
Pętla while w R: przykłady
1 przykład
Zacznij od najprostszego, co możliwe Programowanie R Przykład. Tworzysz licznik i dodajesz do niego 1 przy każdym przejściu. Pętla musi mieć możliwość zakończenia, więc warunek wyraźnie nakazuje R zatrzymanie się, gdy zmienna przekroczy 10.
Note: Jeśli chcesz zobaczyć aktualną wartość pętli, musisz owinąć zmienną wewnątrz funkcji 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) }
Wyjście:
## 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
2 przykład
Załóżmy, że kupiłeś akcje po 50 dolarów. Jeśli cena spadnie do 45 dolarów lub niżej, chcesz ją sprzedać, w przeciwnym razie trzymasz. Każde przejście pętli losowo zmienia cenę o maksymalnie 10 w obie strony, w okolicach 50:
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) }
Wyjście:
## [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)
Wyjście:
## it took 7 loop before we short the price. The lowest price is 40
Jak używać break i next w pętli while
Dwa słowa kluczowe zmieniają normalny przepływ dowolnej pętli R.
- złamać natychmiast opuszcza pętlę, pomijaping każda pozostała iteracja.
- Następny porzuca tylko bieżącą iterację i przechodzi bezpośrednio do następnego testu warunku.
# 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) }
Warto znać jedną pułapkę. W pętli while polecenie next powraca do testu warunkowego bez uruchamiając cokolwiek poniżej. Jeśli licznik jest zwiększany u dołu ciała, next pomija tę inkrementację, a pętla zawiesza się w nieskończoność. Dlatego w drugim przykładzie zwiększa się zanim następne stwierdzenie, a nie następujące po nim.
Typowe błędy pętli while i pętle nieskończone
Za prawie każdą nieudaną pętlę while odpowiadają cztery błędy.
- Licznik nigdy nie jest aktualizowany. Zapomnienie o inkrementacji pozostawia warunek na stałe TRUE. Naciśnij Esc w RStudio lub Ctrl+C w terminalu, aby przerwać.
- Warunek zwraca wartość NA. Jeśli jakakolwiek wartość w teście jest NA, R zatrzymuje się z komunikatem „brakująca wartość tam, gdzie wymagane jest TRUE/FALSE”. Zabezpiecz ją za pomocą is.na() lub isTRUE().
- Warunek jest dłuższy niż jeden element. Od wersji R 4.2 warunek o długości większej niż jeden jest błędem, a nie ostrzeżeniem. Należy go umieścić w funkcji any() lub all().
- Porównanie zmiennoprzecinkowe nigdy nie staje się FAŁSZEM. while (x != 0.3) może się powtarzać w nieskończoność, ponieważ 0.1 + 0.2 nie jest dokładnie 0.3. Porównaj z tolerancją, używając 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 }
Dodanie maksymalnej liczby iteracji to tanie ubezpieczenie w dowolnej pętli, której wyjście zależy od losowych lub zewnętrznych danych.
