R While Loop med programmeringsexempel
โก Smart sammanfattning
Medan Loop i R-programmering upprepar ett kodblock sรฅ lรคnge dess villkor fรถrblir SANT. Villkoret testas fรถre varje genomgรฅng, sรฅ kroppen kanske aldrig kรถrs alls, och nรฅgot inuti den mรฅste sรฅ smรฅningom gรถra villkoret FALSKT.

Medan Loop in R-programmering
A medan slingan I R upprepas ett kodblock sรฅ lรคnge dess villkor fรถrblir SANT. Villkoret testas innan varje pass, sรฅ en while-slinga kan kรถras noll gรฅnger om villkoret รคr FALSKT frรฅn bรถrjan.
Medan Loop Syntax i R
Fรถljande รคr syntaxen fรถr While Loop in R-programmering:
while (condition) {
Exp
}
R While Loop Flรถdesschema

AnmรคrkningarNรฅgot inuti loopen mรฅste sรฅ smรฅningom gรถra villkoret FALSKT. Om ingenting gรถr det kรถrs loopen fรถr alltid och du mรฅste avbryta R med Esc eller Ctrl+C.
medan Loop vs fรถr Loop vs upprepa Loop i R
R erbjuder tre toaletterping konstruktioner, och valet mellan dem beror pรฅ om du i fรถrvรคg vet hur mรฅnga iterationer du behรถver.
| Kriterier | medan | fรถr | upprepa |
|---|---|---|---|
| Iterationsantal | Okรคnt i fรถrvรคg | Kรคnt i fรถrvรคg | Okรคnt i fรถrvรคg |
| Skick testat | Fรถre varje pass | Sekvensen รคr slut | Aldrig, du mรฅste ringa paus |
| Minsta kรถrningar | Noll | Noll | One |
| Typisk anvรคndning | Konvergerar pรฅ en trรถskel | Att gรฅ en vektor eller lista | Do-while-stillogik |
| syntax | medan (kond.) {} | fรถr (i i v) {} | upprepa { โฆ paus } |
# repeat always runs at least once count <- 1 repeat { print(count) count <- count + 1 if (count > 5) break }
Aktieexemplet ovan passar naturligt fรถr en stund: du kan inte veta i fรถrvรคg hur mรฅnga slumpmรคssiga dragningar det kommer att krรคvas innan priset faller till 45.
While-loop i R: Exempel
Exempelvis 1
Bรถrja med det enklaste mรถjliga R-programmering exempel. Du skapar en rรคknare och lรคgger till 1 till den vid varje pass. Loopen mรฅste kunna avslutas, sรฅ villkoret sรคger explicit รฅt R att stoppa nรคr variabeln passerar 10.
Anmรคrkningar: Om du vill se aktuellt loopvรคrde mรฅste du linda variabeln inuti 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) }
Produktion:
## 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
Exempelvis 2
Anta att du kรถpte en aktie fรถr 50 dollar. Om priset faller till 45 eller lรคgre vill du blanka den, annars fortsรคtter du att hรฅlla. Varje pass i loopen flyttar priset slumpmรคssigt med upp till 10 i endera riktningen runt 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) }
Produktion:
## [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)
Produktion:
## it took 7 loop before we short the price. The lowest price is 40
Hur man anvรคnder break och next i en While-loop
Tvรฅ nyckelord รคndrar det normala flรถdet fรถr vilken R-loop som helst.
- bryta avslutar loopen omedelbart, hoppa รถverping varje รฅterstรฅende iteration.
- Nรคsta รถverger endast den aktuella iterationen och hoppar direkt till nรคsta villkorstest.
# 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รคlla vรคrd att kรคnna till. I en while-loop hoppar next tillbaka till villkorstestet utan kรถra nรฅgot under det. Om din rรคknare รถkas lรคngst ner i kroppen hoppar nรคsta steg รถver det steget och loopen hรคnger sig fรถr alltid. Det รคr dรคrfรถr det andra exemplet รถkar innan nรคsta uttalande snarare รคn efter det.
Vanliga While-loopfel och oรคndliga loopar
Fyra misstag stรฅr fรถr nรคstan varje misslyckad while-loop.
- Rรคknaren uppdateras aldrig. Om man glรถmmer รถkningen blir villkoret permanent SANT. Tryck pรฅ Esc i RStudio eller Ctrl+C i en terminal fรถr att avbryta.
- Villkoret returnerar NA. Om nรฅgot vรคrde i testet รคr NA, stannar R med "saknat vรคrde dรคr TRUE/FALSE behรถvs". Skydda det med is.na() eller med isTRUE().
- Villkoret รคr lรคngre รคn ett element. Sedan R 4.2 รคr ett villkor med en lรคngd stรถrre รคn ett ett fel snarare รคn en varning. Linda in det i any() eller all().
- Flyttalsjรคmfรถrelse blir aldrig FALSK. medan (x != 0.3) kan loopa fรถr evigt eftersom 0.1 + 0.2 inte รคr exakt 0.3. Jรคmfรถr istรคllet med en tolerans, anvรคnd 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 }
Att lรคgga till ett maximalt iterationsantal รคr en billig fรถrsรคkring i alla loopar vars utgรฅng beror pรฅ slumpmรคssiga eller externa data.
