해보記/R

<記> R 데이터 조건문 - if/ifelse, switch

Light Pillar 2019. 12. 18. 11:47

R은 통계분석을 위한 프로그램을 작성하는 언어이다. C, Java 등과 같다. 무엇을 목적을 하느냐가 다를 뿐이라고 할까?

R도 다른 프로그램 언어와 같기 때문에, 당연히 프로세스가 진행되는 동안에 제어문이나 조건문 등이 있다. 

대표적인 데이터 조건문인 if/ifelse, switch 에 대해 살펴보자


if/ifelse

특정한 조건을 만족했을 경우에만 프로그램 코드를 수행하는 제어 구문으로 항상 논리 연산이 수반 된다. 논리에 따른 결과값에 따라 어떤 코드를 수행할지 결정한다.

# if (조건) 실행문
> x <- c(1, 2, 3, 4)
> y <- c(2, 1, 4, 5)
# x의 합이 y의 합보다 작을 경우 실행
> if(sum(x) < sum(y))
+ print(x)

# if(조건)  조건이 참일 때 실행문 else 조건이 참이 아닐 때 실행문
# 괄호안의 조건이 참이면 참일때의 실행문을 수행하고, 거짓일 때는 참이 아닐 떄의 실행문을 수행하는 표현식
> if(mean(x) > mean(y))
+ print("Mean(x) > Mean(y)") else
+ print("Mean(x) < Mean(y)")

# 중첩 조건문 : 조건문 안에 조건문이 있는 표현식
> if(length(x) == 5) {
+   if(sum(x) == 10)
+   print("length = 5, sum = 10")
+ } else {
+   print("length < 5 or length > 5, sum < 10 or sum > 10")
+ }

# ifelse(조건, 조건이 참일때의 실행문, 조건이 참이 아닐때의 실행문)
> ifelse(x < y, x, y)
> ifelse(sum(x-y) > 0, "positive", ifelse(sum(x-y) < 0, "negative", "zero"))

 

switch

# switch(인수, 표현식1, 표현식2, ...)
# 인수의 결과값이 문자열을 가질 때
> x <- c(1, 2, 3, 4)
> type <- "var"
# type 이라는 문자열 인수값(var)에 해당하는 인수(var)를 찾아서 인수값(var(x))을 실행
> switch(type, mean = mean(x), median = median(x), sum = sum(x), var = var(x))
> type2 <- "median"
> switch(type2, mean = mean(x), median = median(x), sum = sum(x), var = var(x))

# 인수의 결과값이 1보다 큰 정수 값을 가질 때
# 정수 값에 해당하는 순서의 표현식을 실행한다. 정수값이 1이므로 첫 번째 표현식(mean(x))을 실행한다.
> switch(1, mean(x), median(x), sum(x), var(x))
# 4번째 표현식
> switch(4, mean(x), median(x), sum(x), var(x))
# 2번째 표현식
> switch(2, mean(x), median(x), sum(x), var(x))