[R] 반복문 사용하기 (for, while, break, next)
다른 프로그래밍 언어와 마찬가지로 R에서도 반복문을 사용할 수 있습니다.
문법 자체는 크게 다를 바 없기 때문에 기존에 프로그래밍 언어 경험이 있는 분들은 쉽게 쓸 수 있습니다.
1. for 반복문
1.1. 용법
# data의 값을 x에 할당한 후 문장 수행
for( x in data) {
수행문장
}
1.2. 예시
1~5까지의 수를 print함수를 이용하여 각각 결과를 찍어보겠습니다.
변수 x에 1부터 5까지 각각 할당하면서 print(x) 함수로 각 결과가 나옵니다(변수명은 어떤 걸 써도 상관없음!).
# 1부터 5까지 print } # 1부터 5까지 2로 나눈 값을 print |
이제 for문에 if 함수를 중첩하여 사용해보겠습니다.
예를 들어 for문을 이용해서 짝수만 print 하고 싶으면 다음과 같이 합니다.
# 변수 i에 1부터 10까지 할당한 후, # if문을 통해 나머지가 0인 수를 색출합니다. # %%연산자는 나머지를 구함 ex) a %% b: a를 b로 나눈 나머지 for(i in 1:10){ if(i %% 2==0){ print(i) } } |
Exam1. for문을 이용하여 1~20에서 3의 배수를 구하시오.
(코드는 맨 뒤쪽에)
2. while
2.1. 용법
while(조건) {
조건이 참일 때 수행문장
}
while문은 괄호 안에 있는 조건이 참일 경우에 블록 안에 있는 문장을 수행합니다.
<while문이 for문과 다른 점>
(1) while문은 반복 + 조건이 같이 들어간 혼합 형태 (2) while문은 반복횟수 지정이 불필요 |
2.2. 예시
아래 코드를 보면 z에 먼저 1을 할당하고 조건이 참이면 print(z)를 수행합니다. 그 이후 +1 하여 다시 위로 올라가 해당 문장을 반복합니다.
보다시피 처음 초기값(z <- 1)을 지정하는 것 외에는 따로 반복 횟수를 지정하지 않습니다. 따라서 +1 하여 변수를 갱신해주는 형태입니다. 주의해야 할 점은 만약 z <- z+1 을 쓰지 않으면 무한루프(infinite loop)에 빠지게 됩니다. 왜냐하면 z에는 계속 1이 할당되어 있는 형태이기 때문이죠..
# 1부터 10까지 print하기 z <- 1 # 할당될 변수를 지정 while(z <=5){ # z가 5보다 작은 경우 문장 수행 print(z) z <- z+1 # z의 값을 +1 하여 새로운 값으로 갱신 } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 # 무한루프 # 결과값을 실행하면 조건식이 항상 참이 되어 1을 계속 찍어냅니다. z <- 1 while(z<=10){ print(z) } [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 [1] 1 . . . |
Exam2. while문을 이용하여 1~20에서 2의 배수를 구하시오.
(코드는 맨 뒤쪽에)
3. break
3.1. 용법
break는 반복문을 종료하는 함수인데, 주로 조건문과 결합하여 사용합니다.
반복문 안에서 break 함수를 만나면 해당 반복문을 중지하고 빠져나옵니다.
3.2. 예시
# 변수 test에 1이 할당된 후 break 함수를 만나 1만 출력됨 for(test in 1:10){ print(test) break } [1] 1 # 3까지 출력하기 for(test in 1:10){ if(test == 4){ # test의 값이 4이면 반복문을 멈춤 break } print(test) } [1] 1 [1] 2 [1] 3 |
4. next
4.1. 용법
next는 수행 중인 반복을 중지하고 다음 반복으로 넘어가는 함수입니다.
break함수와 마찬가지로 조건문과 결합하여 자주 사용됩니다.
4.2. 예시
# 짝수만 찍기 for(pp in 1:10){ if(pp %% 2 != 0){ # 변수 pp의 값을 2로 나눌 때 나머지가 0이 아닌 경우(홀수) next # next 함수를 사용하여 다음 반복을 실행 } print(pp) } |
Exam3. 변수 p에 1~50까지 할당되어 있습니다. 2의 배수이면 다음 반복으로 넘어가고 40 이상의 수는 print하지 않는 수를 구하시오. (코드는 뒤쪽에)
-------------------------------------------------------------------------------------------------
# Exam1. for문을 이용하여 1~20 에서 3의 배수를 구하시오. for(x in 1:20){ if(x %% 3==0) print(x) } [1] 3 [1] 6 [1] 9 [1] 12 [1] 15 [1] 18 # Exam2. while문을 이용하여 1~20 에서 2의 배수를 구하시오. x <- 1 while(x<=20){ if(x %% 2 ==0){ print(x) } x <- x+1 } # Exam3. 변수 x에 1~50까지 할당되어 있습니다. 6의 배수이면 다음 반복으로 넘어가고 40 이상의 수는 print하지 않는 수를 구하시오. for(x in 1:50){ if(x %% 6!=0){ next } else if(x>=40){ break } print(x) } [1] 6 [1] 12 [1] 18 [1] 24 [1] 30 [1] 36 |
개인적으로 특수한 경우를 제외하곤 for문을 자주 쓰는데, 가독성이 뛰어나고 코드를 명확하게 파악할 수 있기 때문입니다. 아무래도 while문은 반복 횟수가 지정되어 있지 않기 때문에 직관적으로 쓰기엔 for문보다 코드를 한눈에 파악하기 쉽지 않습니다. 하지만 내용 자체가 어려운 편은 아니라서 상황에 맞게 적절하게 쓰면 됩니다.
'데이터 분석 > R 데이터 처리 & 분석' 카테고리의 다른 글
[R] assign 함수 이용하여 값을 변수에 넣기 (1) | 2021.06.04 |
---|---|
[R] 엑셀 파일 불러오기와 저장하기 (xls, xlsx) (3) | 2020.12.25 |
[R] 벡터 생성과 인덱싱(Indexing) 및 추출 (0) | 2020.10.06 |
[R] tidyr 패키지를 이용한 데이터 재구조(pivot_longer, pivot_wider) (0) | 2020.10.02 |
[R] 쉼표(comma , )로 구분된 데이터 정제하기 (0) | 2020.09.30 |