프로그래밍 예제가 포함된 R While 루프
⚡ 스마트 요약
R 프로그래밍에서 while 루프는 조건이 참인 동안 코드 블록을 반복 실행합니다. 조건은 매번 실행 전에 검사되므로, while 루프 본문이 전혀 실행되지 않을 수도 있으며, 결국에는 본문 내의 어떤 부분이 조건을 거짓으로 만들어야 합니다.

R 프로그래밍의 While 루프
A while 루프 R에서 `request` 함수는 조건이 참인 동안 코드 블록을 반복 실행합니다. 조건은 테스트됩니다. 전에 각 반복마다 실행되므로, 조건이 처음부터 거짓이면 while 루프는 한 번도 실행되지 않을 수 있습니다.
R의 while 루프 구문
R 프로그래밍에서 While 루프의 구문은 다음과 같습니다.
while (condition) {
Exp
}
R While 루프 흐름도

주의 사항: 반복문 안에서 어떤 동작이 결국 조건을 거짓으로 만들어야 합니다. 만약 아무것도 조건을 거짓으로 만들지 못하면 반복문은 무한히 실행되므로 Esc 키나 Ctrl+C 키를 눌러 R 키를 종료해야 합니다.
R에서 루프, for 루프, 반복 루프의 차이점은 무엇일까요?
R은 화장실 3개를 제공합니다.ping 다양한 구성 방식이 있으며, 그중 하나를 선택하는 것은 필요한 반복 횟수를 미리 알고 있는지 여부에 달려 있습니다.
| 기준 | 동안 | 을 통한 | 반복 |
|---|---|---|---|
| 반복 횟수 | 사전에 알 수 없음 | 미리 알려진 | 사전에 알 수 없음 |
| 테스트 완료 | 각 패스 전에 | 시퀀스가 모두 소진되었습니다 | 절대, 반드시 휴식을 요청해야 합니다. |
| 최소 실행 횟수 | 제로 | 제로 | 한 |
| 일반적인 사용 | 임계값으로 수렴 | 벡터 또는 리스트를 따라가기 | Do-while 스타일 논리 |
| 통사론 | while (cond) { } | (i in v) { } | 반복 { … 중단 } |
# repeat always runs at least once count <- 1 repeat { print(count) count <- count + 1 if (count > 5) break }
위의 주식 예시는 '시간'이라는 개념에 자연스럽게 들어맞습니다. 가격이 45까지 떨어지기까지 몇 번의 무작위 추첨이 필요할지 미리 알 수 없기 때문입니다.
R 언어에서의 while 루프: 예제
예제 1
가장 간단한 것부터 시작하세요 R 프로그래밍 예시입니다. 카운터를 생성하고 매 반복마다 1씩 더합니다. 루프는 종료될 수 있어야 하므로, 조건문에서 변수가 10을 넘으면 R에게 루프를 멈추도록 명시적으로 지시합니다.
주의 사항: 현재 루프 값을 보려면 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) }
출력:
## 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
예제 2
주식을 50달러에 샀다고 가정해 봅시다. 가격이 45달러 이하로 떨어지면 공매도하고, 그렇지 않으면 계속 보유합니다. 이 루프는 매회 가격을 50달러를 기준으로 양방향으로 최대 10달러까지 무작위로 변동시킵니다.
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) }
출력:
## [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)
출력:
## it took 7 loop before we short the price. The lowest price is 40
while 루프에서 break와 next를 사용하는 방법
두 개의 키워드는 모든 R 루프의 정상적인 흐름을 바꿉니다.
- 하다 루프를 즉시 종료하고 건너뜁니다.ping 남은 모든 반복.
- 다음 것 현재 반복만 포기하고 다음 조건 테스트로 바로 넘어갑니다.
# 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) }
알아두면 좋을 함정 하나. while 루프에서, 다음 단계는 조건 테스트로 다시 돌아갑니다. 없이 그 아래에 있는 어떤 것도 실행되지 않습니다. 카운터가 본문 맨 아래에서 증가되면, `next`는 해당 증가 부분을 건너뛰고 루프가 영원히 멈추게 됩니다. 두 번째 예제에서 카운터가 증가하는 이유가 바로 이것입니다. 전에 그 다음 문장이 아니라 바로 다음 문장입니다.
일반적인 while 루프 오류 및 무한 루프
거의 모든 while 루프 실패의 원인은 네 가지 실수에 있습니다.
- 카운터는 전혀 업데이트되지 않습니다. 증분 값을 잊어버리면 조건이 영구적으로 참이 됩니다. RStudio에서는 Esc 키를, 터미널에서는 Ctrl+C 키를 눌러 작업을 중단하세요.
- 해당 조건은 NA를 반환합니다. 테스트에서 값이 NA인 경우 R은 "TRUE/FALSE가 필요한 위치에 결측값이 있습니다"라는 오류 메시지를 표시하며 테스트를 중단합니다. 이 문제를 해결하려면 `is.na()` 또는 `isTRUE()`를 사용하십시오.
- 해당 조건은 하나 이상의 요소로 이루어져 있습니다. R 4.2 버전부터는 길이가 1보다 큰 조건은 경고가 아닌 오류로 처리됩니다. 따라서 any() 또는 all() 함수로 감싸야 합니다.
- 부동 소수점 비교는 절대 거짓이 되지 않습니다. `while (x != 0.3)`은 0.1 + 0.2가 정확히 0.3이 아니므로 무한 루프에 빠질 수 있습니다. 대신 허용 오차를 사용하여 `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 }
최대 반복 횟수를 설정하는 것은 종료 시점이 임의 데이터나 외부 데이터에 따라 결정되는 모든 루프에서 비용 대비 효과를 극대화하는 방법입니다.
