R While Loop med programmeringseksempler
โก Smart opsummering
Mens Loop i R-programmering gentager en kodeblok, sรฅ lรฆnge dens betingelse forbliver SAND. Betingelsen testes fรธr hver gennemgang, sรฅ kroppen kรธrer muligvis slet ikke, og noget i den skal til sidst gรธre betingelsen FALSK.

Mens Loop in R-programmering
A mens lรธkke I R gentager man en kodeblok, sรฅ lรฆnge dens betingelse forbliver SAND. Betingelsen testes fรธr hvert gennemlรธb, sรฅ en while-lรธkke kan kรธre nul gange, hvis betingelsen er FALSK fra starten.
Mens Loop Syntax i R
Fรธlgende er syntaksen for While Loop in R-programmering:
while (condition) {
Exp
}
R Mens Loop Flowchart

BemรฆrkNoget i lรธkken skal til sidst gรธre betingelsen FALSK. Hvis intet gรธr det, kรธrer lรธkken for evigt, og du skal afbryde R med Esc eller Ctrl+C.
mens Loop vs for Loop vs gentag Loop i R
R tilbyder tre toiletterping konstruktioner, og valget mellem dem kommer an pรฅ, om du pรฅ forhรฅnd ved, hvor mange iterationer du har brug for.
| Kriterier | mens | forum | gentag |
|---|---|---|---|
| Iterationsantal | Ukendt pรฅ forhรฅnd | Kendt pรฅ forhรฅnd | Ukendt pรฅ forhรฅnd |
| Tilstand testet | Fรธr hver gennemkรธrsel | Sekvensen er opbrugt | Aldrig, du skal ringe til pause |
| Minimumslรธb | Zero | Zero | รn |
| Typisk brug | Konvergerer pรฅ en tรฆrskel | Gรฅ en vektor eller liste | Do-while-stillogik |
| Syntaks | mens (kond.) {} | for (i i v) {} | gentag { โฆ pause } |
# repeat always runs at least once count <- 1 repeat { print(count) count <- count + 1 if (count > 5) break }
Aktieeksemplet ovenfor passer naturligt ind i et stykke tid: du kan ikke vide pรฅ forhรฅnd, hvor mange tilfรฆldige trรฆkninger der skal til, fรธr prisen falder til 45.
While-lรธkke i R: Eksempler
Eksempel 1
Start med det enklest mulige R programmering eksempel. Du opretter en tรฆller og lรฆgger 1 til den ved hver gennemgang. Lรธkken skal kunne slutte, sรฅ betingelsen fortรฆller eksplicit R, at den skal stoppe, nรฅr variablen passerer 10.
Bemรฆrk: Hvis du vil se den aktuelle slรธjfevรฆrdi, skal du pakke variablen inde i funktionen 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) }
Output:
## 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
Eksempel 2
Antag, at du har kรธbt en aktie til 50 dollars. Hvis prisen falder til 45 eller derunder, vil du shorte den, ellers fortsรฆtter du med at holde. Hvert gennemlรธb af lรธkken flytter prisen tilfรฆldigt med op til 10 i begge retninger omkring 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) }
Output:
## [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)
Output:
## it took 7 loop before we short the price. The lowest price is 40
Sรฅdan bruger du break og next i en While-lรธkke
To nรธgleord รฆndrer det normale flow i enhver R-lรธkke.
- bryde afslutter lรธkken med det samme, spring overping hver resterende iteration.
- nรฆste afbryder kun den aktuelle iteration og hopper direkte til den nรฆste betingelsestest.
# 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) }
En fรฆlde vรฆrd at kende. I en while-lรธkke hopper next tilbage til betingelsestesten uden kรธrer noget under det. Hvis din tรฆller รธges i bunden af โโโโdelen, springer nรฆste trin over, og lรธkken hรฆnger for evigt. Det er derfor, det andet eksempel รธger fรธr den nรฆste sรฆtning i stedet for efter den.
Almindelige While-lรธjfejl og uendelige lรธkker
Fire fejl tegner sig for nรฆsten alle mislykkede while-lรธkker.
- Tรฆlleren opdateres aldrig. Hvis man glemmer inkrementet, forbliver betingelsen permanent SAND. Tryk pรฅ Esc i RStudio eller Ctrl+C i en terminal for at afbryde.
- Betingelsen returnerer NA. Hvis en vรฆrdi i testen er NA, stopper R med "manglende vรฆrdi hvor TRUE/FALSE er nรธdvendig". Beskyt den med is.na() eller med isTRUE().
- Betingelsen er lรฆngere end รฉt element. Siden R 4.2 er en betingelse med en lรฆngde stรธrre end รฉn en fejl snarere end en advarsel. Omslut den med any() eller all().
- Flydende komma-sammenligning bliver aldrig FALSK. mens (x != 0.3) kan loope for evigt, fordi 0.1 + 0.2 ikke er prรฆcis 0.3. Sammenlign i stedet med en tolerance ved at bruge 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 }
At tilfรธje et maksimalt iterationsantal er en billig forsikring i enhver lรธkke, hvis udgang afhรฆnger af tilfรฆldige eller eksterne data.
