안녕하세요. 언제나 휴일이예요.
- [데이터 분석 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