본문 바로가기

R/R을 이용한 데이터 처리&분석 실무

흐름 제어(조건문과 반복문)

반응형

이 절에서는 프로그래밍의 필수 요소가 되는 조건문과 반복문(if, for, while, repeat)에 대해서 알아본다. 문법은 대부분의 언어와 유사하므로 어렵지 않게 익힐 수 있을것이다. switch 문도 존재하지만 잘 사용하지 않으며, 대신 조건문을 많이 사용한다.

 

if

먼저 조건에 따라 코드의 수행 여부를 결정하는 if 문에 대해 살펴본다. 다음은 if 문의 문법 구조를 정리한 표다.

문법 의미
if (cond) {cond가 참일 때 실행할 문장} else {cond가 거짓일 때 실행할 문장} 조건 cond가 참, 거짓인 경우에 따라 {}블록을 실행한다. 필요한 경우 else 블록을 지정할 수 있다.

 

다수의 TRUE, FALSE 데이터를 한 번에 처리한다면 ifelse() 함수를 고려할 수 있다.

 

-ifelse : 주어진 test 값에 따라 yes 또는 no 값을 반환한다.

ifelse(test,yes,no)

 

test에 다수의 TRUE, FALSE가 저장되어 있을 때 TRUE에 대해서는 yes 값을, FALSE에 대해서는 no 값을 선택하여 반환한다.

 

조건문 if의 예를 살펴보자.

>if(TRUE){
+  print("TRUE")
+  print("hello")
+}else{
+  print("FALSE")
+  print("world")
}
[1]"TRUE"
[1]"hello"

 

위 코드의 결과는 "TRUE", "hello"다.

 

ifelse()를 사용하면 if 문을 다수의 데이터에 한 번에 적용하는 연산이 가능하다. 다음은 1,2,3,4,5에서 값이 짝수일 경우 "even", 홀수일 경우 "odd"를 출력하는 예다.

>x<-c(1,2,3,4,5)
>ifelse(x %%2==0, "even","odd")
[1]"odd", "even", "odd", "even", "odd"

 

반복문

R의 반복문에는 for, while, repeat 문이 있다. 다음은 이 세 가지 문법을 설명한 표다.

문법 의미
for(i in data){i를 사용한 문장} data에 들어 있는 각각의 값을 변수 i에 할당하면서 각각에 대해 블록 안의 문장을 수행한다.
while(cond){조건이 참일 때 수행할 문장} 조건 cond가 참일 때 블록 안의 문장을 수행한다.
repeat{반복해서 수행할 문장} 블록 안의 문장을 반복해서 수행한다. repeat은 다른 언어의 do-while에 해당한다.

 

반복문 내 블록에서는 break,next문을 사용해 반복의 수행을 조정할 수 있다.

-break : 반복문을 종료한다.

-next : 현재 수행 중인 반복문 블록의 수행을 중단하고 다음 반복을 시작한다.

>for ( i in 1:10){print(i)}
[1]1
[1]2
[1]3
...
[1]10

 

다음 while 문은 1부터 10까지 숫자를 출력하기 위해 변수 i의 값을 10과 비교하면서 print()하는 예다.

>i<-1
>while(i<=10){
+  print(i)
+  i<-i+1
}
[1]1
[1]2
[1]3
...
[1]10

 

while문에서 next를 사용해 짝수만 출력해보자. 값이 짝수인지 확인하는 데는 나머지 연산자 %%를 사용했다.

>i<-0
>while(i<=9){
+  i<-i+1
+  if (i %%2 !=0){
+    next
+    }
+  print(i)
+}
[1]2
[1]4
[1]6
[1]8
[1]10

 

다음은 repeat을 사용해서 1부터 10까지 값을 출력한 예다. repeat문에서 조건을 지정하려면 블록 내부에서 if문으로 조건을 확인하고 break로 빠져나오도록 해야한다.

>i<-1
>repeat{
+  print(i)
+  if(i>=10) {
+    break
+  }
+  i<-i+1
+}
[1]1
[1]2
[1]3
...
[1]10

 

R을 이용한 데이터 처리&분석 실무 中

반응형

'R > R을 이용한 데이터 처리&분석 실무' 카테고리의 다른 글

함수의 정의  (0) 2020.01.30
연산  (0) 2020.01.30
타입 판별, 타입변환  (0) 2020.01.29
데이터 프레임  (0) 2020.01.29
리스트  (0) 2020.01.28