제어문도 살펴볼게요. [데이터 분석 with R]

안녕하세요. 언제나 휴일이예요.

  • [데이터 분석 with R]은 동영상 강의 중심으로 편집하고 있습니다. 물리적 시간이 허용하는 범위 내에서 본문도 작성해 나갈게요.

R언어의 제어문을 살펴볼게요.

조건문

조건문에는 if{}, if{}else{}, ifelse가 있습니다.

if{}

if(조건표현){참일 때 수행할 구문}

다음은 수를 입력받아 음수일 때 양수로 변환하는 예제입니다.

> #if{}
> x=scan()
1: -23
2: 
Read 1 item
> if(x<0){
+ x=-x
+ }
> print(x)
[1] 23

if{}else{}

if(조건표현){참일 때 수행할 구문}else{거짓일 때 수행할 구문}

주의할 점은 if에서 닫는 }뒤에 바로 else가 와야 합니다.

다음은 짝수인지 홀수인지 판별하는 예제입니다. 앞쪽은 if의 닫는 }뒤에 바로 else가 오지 않아서 에러가 발생한 것입니다. 바로 뒤에 정상적인 구문이 있습니다.

>#if{}else{}
> if(x%%2==0){
+ print("짝수")
+ }
> else
에러: 예기치 않은 'else'입니다 in "else"
> if(x%%2==0){
+ print("짝수")
+ }else{
+ print("홀수")
+ }
[1] "홀수"
>

ifelse

ifelse(조건표현,참일 때 구문, 거짓일 때 구문)

삼항 연산자와 비슷하며 R에서는 제법 많이 사용합니다.

> #ifelse
> ifelse(x%%2==0,"짝수","홀수")
[1] "홀수"

선택문

R언어에서 선택문은 독특합니다.

표현의 값에 따라 해야 할 구문을 선택해서 수행한다는 점에서는 실용적이로 보일 수도 있어요.

표현에 수가 왔을 때

switch(number,…)

수는 자연수여야 합니다.

number 뒤에 열거한 구문 중에 number번째 해당하는 구문을 선택 수행합니다.

다음은 정수를 입력받아 입력한 값에 따라 수행할 구문을 선택하는 예입니다.

예에서 “일”, “이”,”삼”,”사”는 해야 할 구문이라고 가정할게요.

> #switch
> n=scan()
1: 2
2: 
Read 1 item
> switch(n,"일","이","삼","사")
[1] "이"
> n=4
> switch(n,"일","이","삼","사")
[1] "사"
> switch(n,"일","이","삼")

표현에 문자가 왔을 때

switch(character,…)

character 표현 뒤에 ‘case 값=해야 할 일’을 표현합니다.

예를 들어 switch(str,a=fnA(), b=fnB(), c=fnC()) 표현은 str값이 “a”일 때 fnA함수 호출, “b”일 때 fnB 함수 호출, “c”일 때 fnC함수 호출입니다.

대입문처럼 보이지만 등호(=) 앞 표현은 case 값 표현이라는 것이죠.

> #switch character
> str = readline()
eh
> switch(str,a="일",b="이",eh="삼")
[1] "삼"
> eh
에러: 객체 'eh'를 찾을 수 없습니다

반복문

R에 반복문에는 for, while, repeat 문이 있습니다.

for문

파이썬에서의 for문과 흡사합니다. C#에서의 foreach문 냄새도 조금 나죠.

for(value in seq) expr

seq에 있는 각각의 항목을 value로 취급하여 expr을 반복 수행합니다.

다음은 1에서 10 사이에 있는 각 원소를 i로 취급하여 print(i)를 반복 수행하는 예입니다.

1부터 10까지 출력한다는 것이죠.

> #for
> for(i in 1:10){
+ print(i)
+ }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10

while 문

while(조건표현) expr

while문은 대부분 언어가 비슷합니다.

조건 표현이 참일 동안 expr을 반복 수행하는 것입니다.

반복 수행하는 구문에는 조건 표현에 변화를 주지 않는다면 무한 루프에 빠질 수 있음을 주의하세요.

다음은 0에서 100사이의 정수 합계를 구하는 흔하디 흔한 while 문 예제입니다.

> #while
> i=0
> sum=0
> while(i<=100){
+ sum=sum+i
+ i=i+1
+ }
> sum
[1] 5050

repeat문

repeat expr

repeat문은 무한 반복문입니다.

만약 탈출을 원한다면 break를 사용하세요.

다음은 0을 입력하기 전까지 입력한 수의 합계를 계산하는 예제입니다.

> #repeat
> sum=0
> repeat{
+ x=scan()
+ if(x==0){ break }
+ sum=sum+x
+ }
1: 23
2: 
Read 1 item
1: 45
2: 
Read 1 item
1: 67
2: 
Read 1 item
1: 0
2: 
Read 1 item
> sum
[1] 135