15.2 while 반복구문

While루프는 조건 테스트로 시작됩니다. TRUE이면 명령문을 실행합니다. 명령문이 실행되면 조건이 다시 테스트되고 조건이 FALSE가 될 때까지 계속해서 반복하다가 루프가 종료됩니다. while 내의 블록이 몇 번 반복되었는가를 확인하기 위한 counter 개체를 포함하는 것도 좋은 방법입니다.

while 반복구문의 플로우 차트는 다음과 같습니다.

Flowchart of while loop in R programming

while 반복구문의 형식은 다음과 같습니다.

# while 반복구문의 형식
counter <- 1                                  # 반복횟수 확인을 위한 counter 입니다.

while(test_expression) {                      # while 반복구문의 시작입니다.
        statement                             # 반복할 명령문을 기입합니다.
        counter <- counter + 1                # counter를 1증가 시킵니다.
}

while 루프는 잘못 작성되면 잠재적으로 무한 루프가 발생할 수 있습니다. 따라서 주의해서 사용해야 합니다.

for 반복구문과 while 반복구문이 얼마나 유사한 지 다음의 예에서 살펴보겠습니다.

## for 반복구문과 while 반복구문은 매우 유사합니다.

# while 반복구문의 예입니다.
counter <- 1                                 # counter를 1로 설정합니다.

while(counter <= 10) {                       # while 반복구문의 시작입니다. 
        print(counter)                       # counter를 출력합니다.
        counter <- counter + 1               # counter를 1증가 시킵니다.
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
# 위와 같은 결과를 가져오는 for 반복구문입니다.
counter <- vector(mode = "numeric", length = 10)  # counter 변수를 정의합니다.

for(i in 1:length(counter)) {                     # for 반복구문의 시작입니다.
        print(i)                                  # i를 출력합니다.
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10

for 루프와 while 루프의 주요 차이점은 다음과 같습니다. 코드가 실행되어야 하는 반복 횟수가 알려져있을 때 for 루프가 사용되며, 반복 횟수가 사전에 미리 정해져 있지 않은 경우while 루프가 사용됩니다. 예를 들어, 다음은 x 값을 취하고 x가 조건식에 있는 값 9를 초과할 때까지 x에서 임의로 1을 더하거나 뺍니다. outputx의 값이 조건식의 임계값인 9를 초과 할 때까지 코드가 14 번 실행되었음을 보여줍니다.

# for 반복구문과 while 반복구문의 차이를 비교합니다.

counter <- 1                               # counter의 초기값으로 1로 설정합니다.
x <- 5                                     # x의 초기값으로 5을 설정합니다.
set.seed(3)                                # 난수의 초기값을 지정합니다.

while(x >= 3 && x <= 8 ) {                 # while 반복구문의 시작입니다.
        coin <- rbinom(1, 1, 0.5)          # 이항분포인 난수를 발생하여 coin에 할당합니다.
        
        if(coin == 1) { ## random walk     # coin 값이 1인지 확인합니다. # coin 값이 1이면
                x <- x + 1                 # x에 1을 더합니다.
        } else {                           # coin 값이 1이 아니면
                x <- x - 1                 # x에서 1을 뺍니다.
        }
        cat("On iteration", counter, ", x =", x, '\n')   # 블록 실행결과를 출력합니다.
        counter <- counter + 1                           # counter를 1증가 시킵니다.
}
## On iteration 1 , x = 4 
## On iteration 2 , x = 5 
## On iteration 3 , x = 4 
## On iteration 4 , x = 3 
## On iteration 5 , x = 4 
## On iteration 6 , x = 5 
## On iteration 7 , x = 4 
## On iteration 8 , x = 3 
## On iteration 9 , x = 4 
## On iteration 10 , x = 5 
## On iteration 11 , x = 6 
## On iteration 12 , x = 7 
## On iteration 13 , x = 8 
## On iteration 14 , x = 9