14.5 switch() 함수

R의switch ()함수는 list의 요소에 대해 조건식을 테스트합니다. 조건식에서 평가된 값이 list의 항목과 일치하면 해당 값이 반환됩니다.

switch() 함수의 형식은 다음과 같습니다.

switch (expression, list)

Here, the expression is evaluated and based on this value, the corresponding item in the list is returned.

If the value evaluated from the expression matches with more than one item of the list, switch() function returns the first matched item.

여기서 조건식인 expression이 평가되고, 이 값을 기반으로 list의 해당 항목이 반환됩니다. 조건식인 expression에서 평가된 값이 list의 두 개 이상의 항목과 일치하는 경우 switch()함수는 첫 번째 일치 항목을 반환합니다.

switch() 함수의 예를 들어 보겠습니다. 평가된 값이 숫자이면 목록의 해당 항목이 반환됩니다.

switch(2,"red","green","blue")                 # 2번째 요소가 반환됩니다.
## [1] "green"
switch(1,"red","green","blue")                 # 1번째 요소가 반환됩니다.
## [1] "red"

이 예에서 "red","green","blue"가 세 개의 항목으로 된 리스트입니다. 이처럼 switch()함수는 평가된 숫자 값에 해당하는 항목을 반환합니다.

그런데 만일 해당하는 항목이 없으면 어떻게 될까요? 결론적으로 NA를 반환하게 됩니다.

x <- switch(4,"red","green","blue")            # 4번째 항목이 없기 때문에 NA를 반환합니다.
x
## NULL
x <- switch(0,"red","green","blue")            # 0번째 항목이 없기 때문에 NA를 반환합니다.
x
## NULL

switch() 함수의 조건식에 문자열도 사용될 수 있습니다. 그러면 switch() 함수는 이 문자열으로 이름 붙여진 항목의 값을 반환하게 됩니다.

switch("color", "color" = "red", "shape" = "square", "length" = 5)     # "color" 요소를 반환합니다.
## [1] "red"
                                                                       # 따라서 "red"가 반환됩니다.
switch("length", "color" = "red", "shape" = "square", "length" = 5)    # "length" 요소를 반환합니다.         
## [1] 5
                                                                       # 따라서 5를 반환합니다.

다음은 switch() 함수를 이용한 간단한 계산기 프로그램입니다.15

# 사칙연산을 수행하는 함수로 구현된 단순한 계산기 프로그램입니다.
add <- function(x, y) {
       return(x + y)
}
subtract <- function(x, y) {
            return(x - y)
}
multiply <- function(x, y) {
            return(x * y)
}
divide <- function(x, y) {
          return(x / y)
}

# 사용자로부터 자료를 입력받습니다.
print("연산자를 선택하세요(1/2/3/4).")
## [1] "연산자를 선택하세요(1/2/3/4)."
print("1. 더하기")
## [1] "1. 더하기"
print("2. 빼기")
## [1] "2. 빼기"
print("3. 곱하기")
## [1] "3. 곱하기"
print("4. 나누기")
## [1] "4. 나누기"
choice = as.integer(readline(prompt="[1/2/3/4] 중에서 선택하세요 : "))
## [1/2/3/4] 중에서 선택하세요 :
num1 = as.integer(readline(prompt="첫 번째 수를 입력하세요 : "))
## 첫 번째 수를 입력하세요 :
num2 = as.integer(readline(prompt="두 번째 수를 입력하세요 : "))
## 두 번째 수를 입력하세요 :
# 연산자를 선택합니다.
operator <- switch(choice,"+", "-", "*", "/")

# 각 연산자에 해당하는 함수를 선택하여 연산을 수행합니다.
result <- switch(choice, add(num1, num2), subtract(num1, num2), multiply(num1, num2), divide(num1, num2))

# 계산결과를 출력합니다.
print(paste(num1, operator, num2, "=", result))
## [1] "NA  NA = "