사용자정의함수는 개발 언어에서 기본적으로 제공되는 함수가 아닌, 사용자가 직접 정의한 함수를 의미합니다. 사용자 정의함수를 사용함으로써 코드의 반복 작성을 방지하고, 스크립트의 유지보수 및 가독성을 높일 수 있는 장점이 있습니다. 

 

23.1. 사용자정의함수(User-Define Function)의 구조와 프로세스

더보기

(1) 사용자정의함수의 구조

사용자정의함수는 크게 parameteractionreturn문으로 구성됩니다. 단 여기서 말하는 action은 R에서 정의된 키워드를 의미하는 것이 아니라, 함수의 흐름을 표현하고자 임의로 정의한 것입니다. 사용자정의함수는 제어문과 마찬가지로 실행 구문(block-statement; {})을 통해 함수의 흐름을 정의할 수 있습니다. 구조는 다음과 같습니다. 

function(parameter1, parameter2, ∙∙∙){action, ∙∙∙, return}

 

(2) 사용자정의함수의 프로세스

 출처 : https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98

이전 <7. 함수 구조와 파라미터 이해하기>와 마찬가지로, 사용자정의함수의 작동 방식은 기존의 함수와 마찬가지로 동작합니다. 7장에서 정의된 INPUTPARAMETER, FUNCTION WITH PARAMETERBLOCK-STATEMENT, OUTPUTRETURN은 동일한 의미를 가집니다.

 

(3) 예시

이전 <15. R의 기본 산술 함수 파악하기>에서 살펴봤듯이, R에서는 기본적으로 최빈값 함수를 제공하지 않습니다. 최빈값을 출력하는 stats_mode() 함수를 정의하고 동일한 예시를 적용하면 다음과 같습니다.

stats_mode <- function(X){
  TABLE_X <- table(X)
  MODE_X <- names(which.max(TABLE_X)) 
  return(MODE_X)
}
vector_02 <- c("A", "A", "A", "B", "C", "C")
stats_mode(X=vector_02)

 

23.2. 변수 스코프(Variable Scope)

더보기

(1) 변수 스코프의 정의

스코프는 대상 식별자(변수∙함수의 이름과 같이 어떤 대상을 유일하게 식별할 수 있는 이름 ; identifier)를 찾아내기 위한 규칙을 의미합니다. 변수의 경우 선언된 위치(함수 내, 함수 밖)에 따라 해당 변수가 영향을 미치는 범위까지 달라지며, 이것을 변수의 유효 범위(variable scope)라고 부릅니다.

 

(2) 지역 변수(Local Variable)

지역 변수는 함수의 실행 구문이 작동할 때만 유효(참조 가능)한 변수를 의미하며, 함수의 작동이 끝나는(RETURN이 출력되는) 순간 메모리에서도 삭제됩니다. 예를 들어 "Data Analytics With R"이라는 스칼라를 선언하는 UDF_01() 사용자정의함수를 할당하겠습니다. 

UDF_01 <- function(){
  scalar_01 <- "Data Analytics With R"
}
UDF_01()

환경창을 통해 변수의 할당 여부를 확인해보면, UDF_01() 함수는 선언되었으나 scalar_01 객체는 선언되지 않았음을 확인할 수 있습니다. 

 

(3) 전역 변수(Global Variable)

전역 변수는 함수 내부에서 선언되었으나, 함수의 작동이 끝나더라도 메모리에 삭제되지 않은 변수를 의미합니다. R에서는 <<-를 통해 선언할 수 있습니다. 예를 들어 위와 동일한 경우를 시행하는 UDF_02() 함수를 정의해보겠습니다. 

UDF_02 <- function(){
  scalar_02 <<- "Data Analytics With R"
}
UDF_02()

위의 경우와 달리, scalar_02 객체가 함수의 작동 이후에도 여전히 할당되어 있음을 확인할 수 있습니다.

 

23.3. 파라미터 유형에 따른 함수 처리

더보기

(1) 일반 파라미터(standard parameter)

일반 파라미터란 함수에서 필수적으로 입력해야 하는 입력값으로써, R에서는 ()안에서 파라미터명과 ,을 통해 파라미터 갯수를 정의할 수 있습니다. 예를 들어, 두 실수를 합하는 get_add_01() 함수를 정의하겠습니다.

get_add_01 <- function(number_01, number_02){
  return_value <- number_01 + number_02
  return(return_value)
}
get_add_01(number_01=8, number_02=25)

 

(2) 디폴트 파라미터(default parameter)

디폴트 파라미터는 설정하지 않아도 기본값이 존재하는 입력값을 의미합니다. 일반 파라미터와 같은 방식으로 정의되나, =을 통해 미리 값을 선언할 수 있습니다. 예를 들어 number_02 파라미터에 3이라는 기본값을 가지는 get_add_02() 함수를 정의하겠습니다.

get_add_02 <- function(number_01, number_02=3){
  return_value <- number_01 + number_02
  return(return_value)
}
get_add_02(number_01=2)

 

(3) 가변 파라미터(variadic parameter)

가변 파라미터란 함수에서 입력값의 개수가 정해지지 않았을 때 사용하는 입력값을 의미합니다. 위의 두 함수는 두 개의 변수에서의 합산만을 지원하는데, 가변 파라미터를 이용하여 여러 개의 파라미터를 받도록 하는 get_add_03() 함수를 정의하겠습니다. 

get_add_03 <- function(...){
  return_value <- sum(...)
  return(return_value)
}
get_add_03(1, 3, 5, 7, 9)