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.

  • ๐Ÿ” Kernesyntaks: while (condition) { expression } tester fรธrst betingelsen og kรธrer kun kroppen, mens den evalueres til TRUE.
  • โš ๏ธ Opsigelsesregel: En sรฆtning i kroppen skal รฆndre betingelsen, ellers slutter lรธkken aldrig.
  • ๐Ÿ”ข Tรฆllermรธnster: Initialiser en variabel fรธr lรธkken og inkrementer den indeni, hvilket er standardtรฆlleidiom.
  • ๐Ÿ›‘ Flow kontrol: break afslutter lรธkken med det samme og springer derefter til den fรธlgende iteration.
  • ๐Ÿ” gentag alternativ: repeat kรธrer ubetinget og er udelukkende afhรฆngig af break, hvilket passer til do-while-stillogikken.
  • ๐Ÿ“ Hvornรฅr skal man vรฆlge: Brug while nรฅr antallet af iterationer er ukendt pรฅ forhรฅnd, og nรฅr det er fastsat.

Mens Loop in R

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

R Mens Loop Flowchart
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.

Ofte Stillede Spรธrgsmรฅl

En while-lรธkke tester sin betingelse fรธr fรธrste gennemlรธb, sรฅ den kan kรธre nul gange. En gentagelseslรธkke har ingen betingelse og kรธrer altid mindst รฉn gang, og afsluttes kun, nรฅr den nรฅr en break-sรฆtning.

Tryk pรฅ Esc i RStudio eller Ctrl+C i en terminal for at afbryde udfรธrelsen. Forebyg situationen ved at sikre, at en sรฆtning i kroppen รฆndrer betingelsen, og ved at tilfรธje en maksimal iterationstรฆller.

Brug while nรฅr antallet af iterationer afhรฆnger af et resultat beregnet inde i lรธkken, f.eks. ved at vente pรฅ, at en vรฆrdi krydser en tรฆrskel. Brug nรฅr sekvensen er kendt, fรธr lรธkken starter.

Iterative algoritmer som gradient descent, k-means og forventningsmaksimering kรธrer alle indtil konvergens i stedet for for et fast antal, hvilket er prรฆcis while-mรธnsteret.

Ja. AI-assistenter kan fรฅ รธje pรฅ en manglende tรฆlleropdatering eller en betingelse, der aldrig kan blive FALSK. Tilfรธj altid en print-sรฆtning eller en iterationsgrรฆnse for at bekrรฆfte diagnosen pรฅ dine egne data.

Opsummer dette indlรฆg med: