16.3 함수의 반환 값

이 절에서는 R의 함수에서 값을 반환하는 방법을 학습하겠습니다. 또한 return() 함수없이 함수를 사용하는 방법도 알아 보겠습니다. 여러 번 처리를 수행하고 결과를 반환하려면 함수가 필요합니다. 이것은 R의 return ()함수로 수행됩니다.

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

return(expression)

함수에서 반환되는 값은 유효한 개체가 될 수 있습니다.

16.3.1 return() 함수를 이용한 함수 값의 반환

return() 함수의 사용 예를 들면 다음과 같습니다. 주어진 숫자가 양수인지, 음수인지 또는 0인지를 반환하는 예를 살펴 보겠습니다. 아래와 같이 check() 함수를 정의해 보겠습니다.

check <- function(x) {                          # 함수를 정의합니다.
     if (x > 0) {                               # 첫번째 조건으로 인수가 양수인지 학인합니다.
        result <- "Positive"                      # 첫번째 조건의 TRUE 블럭입니다
     } 
     else if (x < 0) {                            # 두번째 조건으로 음수인지 확인합니다.
          result <- "Negative"                      # 두번째 조건의 TRUE 블럭입니다.
     }
     else {                                         
          result <- "Zero"                          # 모든 조건의 FALSE 블럽입니다.
     }
return(result)                                  # return() 함수로 result를 반환합니다.
}

이제 정의된 check() 함수를 호출해 보겠습니다.

check(1)
## [1] "Positive"
check(-10)
## [1] "Negative"
check(0)
## [1] "Zero"

16.3.2 return() 함수가 없는 함수

함수에서 명시적인 return() 함수가 없는 경우 마지막으로 평가된 식의 값이 자동으로 반환됩니다.

예를 들어 다음은 위의 기능과 동일합니다.

check <- function(x) {
         if (x > 0) {
            result <- "Positive"
         }
         else if (x < 0) {
              result <- "Negative"
         }
         else {
              result <- "Zero"
         }
result
}

우리는 일반적으로 명시적인 return()함수를 사용하여 함수의 값을 반환합니다. 그러나 함수의 마지막 명령문이 return() 함수가 아니면 조건문이 호출된 곳의 결과로 함수가 조기에 종료됩니다.

check <- function(x) {
         if (x>0) {
            return("Positive")
         }
         else if (x<0) {
              return("Negative")
         }
         else {
              return("Zero")
         }
}

위의 예에서x > 0 인 경우 함수는 나머지 부분을 평가하지 않고 즉시"Positive"라는 문자열을 반환합니다.

16.3.3 다중값 반환

return() 함수는 단일 객체 만 반환할 수 있습니다. 다중 값을 반환하려면 복수 개의 요소로 구성되는 벡터나 리스트 등 (또는 다른 개체)을 사용하여 반환할 수 있습니다.

다음은 그 예입니다.

# 다중 값을 반환하는 함수를 정의합니다.
multi_return <- function() {
                my_list <- list("color" = "red", "size" = 20, "shape" = "round")
                return(my_list)                             # my_list 개체를 반환합니다.
}

여기에서 여러 요소로 구성되어 있는 리스트 구조의 my_list를 생성하고 이 리스트를 반환합니다.

a <- multi_return()
a$color
## [1] "red"
a$size
## [1] 20
a$shape
## [1] "round"

앞에서 살펴 본 간단한 계산기 프로그램을 참고하기 바랍니다.