15.3 repeat 반복구문

repeat 반복구문은 코드 블록을 여러 번 반복하는 데 사용됩니다.

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

Flowchart of repeat loop in R programming

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

repeat {
          statement
}

repeat 루프에서 루프를 종료하거나 빠져나가기 위해서는 명령문 블럭에 테스트 조건식을 입력해야 합니다. 한편, 루프 본문에 명시적으로 조건문을 넣고 루프를 종료하기 위해 break 함수를 사용하여 루프를 종료할 수도 있습니다. 그렇게하지 않으면 무한 루프가 발생하게 됩니다.

# repeat 반복구문의 형식
counter <- 1                           # counter의 초기값으로 1을 설정합니다.

repeat {                               # repeat 반복구문의 시작입니다.
        statement                      # 반복될 명령문입니다.
        
        if(test_expression){           # if() 조건문의 시작입니다.
                break                  # 조건문의 조건이 TRUE이면 break에 의해 반복이 종료됩니다.
        }
        counter <- counter + 1
}

예를 들어, (min = ) 1과 (max = ) 25 사이의 균등 분포를 갖는 난수를 추출해 보고자 합니다. 이렇게 생성되는 샘플에 1과 25 사이의 각 정수 값들이 적어도 한번이라도 포함될 때까지 계속 무작위로 값을 추출할 것입니다. 그러나 특정 값이 여러 번 추출되어도 상관은 없습니다.

다음의 코드는 1에서 25 사이의 값을 (반올림하여) 무작위로 추출하는 것을 반복합니다. 그런 다음 if 문을 포함하여 1에서 25 사이의 모든 값이 샘플에 있는지 확인합니다. 그러한 조건이 만족되면 break 문을 사용하여 루프를 종료합니다. 그렇지 않은 경우에는 counter에 1을 추가하고 if 조건문이 참이 될 때까지 루프를 반복합니다. 그런 다음 counter 개체를 확인하여 조건부 요구 사항에 도달하기 까지의 반복 횟수 113을 확인할 수 있습니다.

## repeat 반복구문의 예입니다.
counter <- 1                                     # counter의 초기값으로 1을 설정합니다.
x <- NULL                                        # x를 정의합니다.

# 난수 발생을 반복합니다.
set.seed(1234)                                   # 난수의 초기값을 설정합니다.
repeat {                                         # repeat 반복구문의 시작입니다.
        x <- c(x, round(runif(1, min = 1, max = 25)))   # 난수를 발생시키고 x와 결합합니다.

# 발생된 난수에 대한 조건문입니다.
        if(all(1:25 %in% x)){                    # x에 1:25의 값이 있는지 확인합니다.
                break                            # 조건이 만족되면 반복을 종료하고 블럭 아래로 이동합니다.
        }
                
        counter <- counter + 1                   # counter를 1증가 시킵니다.
}

# 반복횟수를 학인합니다.
counter                                          # 최종 반복횟수를 출력합니다.
## [1] 113