R에서 사용자 정의 함수를 작성하는 것은 반복적인 작업을 자동화하고, 코드를 보다 효율적이고 재사용 가능하게 만드는 데 중요한 역할을 합니다. 사용자 정의 함수는 기본적인 연산을 수행하는 간단한 함수부터 복잡한 분석 작업을 수행하는 함수까지 다양하게 활용될 수 있습니다. 이번 글에서는 R에서 사용자 정의 함수를 작성하고 사용하는 방법에 대해 자세히 알아보고, 실용적인 예시들을 통해 이를 이해하는 데 도움을 드리고자 합니다.
사용자 정의 함수 생성
R에서 사용자 정의 함수는 코드의 재사용성을 높이고, 특정 작업을 반복적으로 수행할 때 매우 유용합니다.
기본 사용자 정의 함수 생성
함수 생성 구문
R에서 함수를 정의하는 기본 구문은 밑과 같습니다.
function_name <- function(arguments) {
# 함수 본문 (여기서 작업 수행)
# 반환할 값 (필요한 경우)
}
- unction_name: 함수를 호출할 때 사용할 이름입니다.
- arguments: 함수에 전달될 인수(파라미터)들입니다. 기본값을 설정할 수 있습니다.
- 함수 본문: 함수가 호출될 때 실행되는 코드 블록입니다.
- 반환 값: return() 함수를 사용하여 값을 반환할 수 있습니다. return()을 생략하면, 마지막으로 계산된 값이 자동으로 반환됩니다.
예시
밑은 간단한 덧셈 함수를 정의하는 예시입니다.
add <- function(x, y) {
result <- x + y
return(result)
}
이 함수를 호출하면, 두 인수의 합이 반환되는 결과를 얻습니다.
add(3, 5) # 결과: 8
함수 인자와 기본값 설정
인자(argument)와 기본값
함수의 인자에는 기본값을 지정할 수 있습니다.
이렇게 하면 함수 호출 시 인자를 생략할 수 있으며, 생략된 인자는 기본값을 사용하게 됩니다.
power <- function(base, exponent = 2) {
return(base^exponent)
}
위 함수는 exponent 인자의 기본값을 2로 설정했습니다. 따라서 다음과 같이 사용할 수 있습니다.
power(3) # 결과: 9 (3의 제곱)
power(3, 3) # 결과: 27 (3의 세제곱)
인자의 순서와 이름 지정
함수를 호출할 때, 인자를 순서대로 전달하거나 이름을 지정하여 전달할 수 있습니다.
power(base = 2, exponent = 3) # 결과: 8
power(exponent = 3, base = 2) # 결과: 8 (순서 상관없이 이름으로 전달 가능)
함수의 반환 값
명시적 반환 (return())
함수는 return() 함수를 사용해 명시적으로 값을 반환할 수 있습니다.
return() 함수가 호출되는 순간 사용자 정의 함수가 종료되고 값을 반환합니다.
multiply <- function(x, y) {
product <- x * y
return(product)
}
암시적 반환
return()을 사용하지 않으면, 함수 본문에서 마지막으로 계산된 값이 자동으로 반환됩니다.
subtract <- function(x, y) {
x - y # 이 값이 자동으로 반환됨
}
subtract(10, 3) # 결과: 7
가변 인자와 ... 사용
가변 인자 처리
R 함수에서 가변 개수의 인자를 받을 때, ... (ellipsis)을 사용하여 다양한 인자를 처리할 수 있습니다. ...는 다른 함수에 인자를 전달하거나, 함수 내에서 반복적으로 사용할 수 있습니다.
summation <- function(...) {
numbers <- c(...)
return(sum(numbers))
}
이 함수는 전달된 모든 인자를 더한 값을 반환합니다.
summation(1, 2, 3, 4, 5) # 결과: 15
벡터와 리스트에 함수를 적용하여 결과를 얻는 방법
R에서 벡터와 리스트에 함수를 적용하는 방법은 매우 중요합니다. 벡터에 함수는 일반적으로 한 번에 적용되지만, 리스트의 경우 lapply(), sapply() 등의 함수를 사용하여 각 요소에 대해 함수를 적용할 수 있습니다.
벡터에 함수 적용
벡터의 각 요소에 대해 기본 함수(mean(), sum() 등)를 적용할 수 있습니다.
numbers <- c(1, 2, 3, 4, 5)
mean(numbers) # 벡터 전체에 대해 평균 계산
리스트에 함수 적용
- lapply(): 리스트의 각 요소에 함수를 적용하고, 결과를 리스트로 반환합니다.
- sapply(): 리스트의 각 요소에 함수를 적용하고, 가능하면 단순한 벡터나 행렬로 반환합니다.
my_list <- list(a = c(1, 2, 3), b = c(4, 5, 6))
# lapply: 결과는 리스트
lapply(my_list, mean) # 결과: 리스트(a = 2, b = 5)
# sapply: 결과는 벡터
sapply(my_list, mean) # 결과: 벡터(a = 2, b = 5)
함수의 인자(argument) 조정
R의 함수들은 다양한 인자를 받아서 결과를 제어할 수 있습니다. 인자를 적절히 조정하여 원하는 분석을 수행할 수 있습니다.
예시 1: mean() 함수의 인자 조정 : na.rm 인자
많은 함수(mean(), sum(), min(), max())에는 na.rm이라는 인자가 있으며, 이를 사용하여 결측치(NA)를 무시할 수 있습니다.
- na.rm = TRUE: 결측치를 제거하고 계산을 수행합니다.
- na.rm = FALSE(기본값): 결측치가 있으면 계산을 수행하지 않고 NA를 반환합니다.
numbers <- c(1, 2, 3, NA, 5)
mean(numbers) # 결과: NA
mean(numbers, na.rm = TRUE) # 결과: 2.75
예시 2: summary() 함수의 결과 해석
- summary() 함수는 벡터의 경우, 최소값, 최대값, 중앙값, 평균 등 기본 통계량을 반환합니다. 데이터프레임의 경우 각 열에 대해 별도로 요약 통계를 제공합니다.
- 범주형 데이터(팩터)에는 각 범주별 빈도를 반환합니다.
df <- data.frame(height = c(150, 160, 170, 180, NA), weight = c(50, 60, 70, 80, 90))
summary(df)
# 결과:
# height weight
# Min. :150.0 Min. :50.0
# 1st Qu.:157.5 1st Qu.:60.0
# Median :170.0 Median :70.0
# Mean :165.0 Mean :70.0
# 3rd Qu.:175.0 3rd Qu.:80.0
# Max. :180.0 Max. :90.0
# NA's :1 NA's :0
# 팩터(factor) 데이터에 대한 summary
factor_var <- factor(c("low", "medium", "high", "medium", "low"))
summary(factor_var)
# 결과:
# low medium high
# 2 2 1
R에서 사용자 정의 함수를 잘 활용하면 코드의 반복성을 줄이고, 복잡한 작업을 보다 쉽게 관리할 수 있습니다. 함수의 인자 조정, 반환 방식, 가변 인자 처리 등 다양한 방법들을 익히면, R을 더욱 강력한 도구로 사용할 수 있습니다. 이번 글을 통해 사용자 정의 함수의 기본 개념과 활용 방법을 이해하는 데 도움이 되었기를 바라며, 앞으로도 다양한 함수를 직접 작성해보면서 R 프로그래밍의 재미를 느껴보시길 바랍니다.
감사합니다!
'프로그래밍 언어 > R' 카테고리의 다른 글
11. R의 기본 문법과 데이터 조작 심화 - 벡터와 리스트 조작 (0) | 2024.08.29 |
---|---|
10. R의 기본 문법과 데이터 조작 심화 - 조건문과 반복문 이해 (0) | 2024.08.27 |
08. R에서 사용하는 기본 함수 이해 (0) | 2024.08.24 |
07. R에서의 기본 연산자 이해 (산술, 비교, 논리, 결측값 처리 연산자) (0) | 2024.08.22 |
06. R 프로그램에서 파일 읽기 및 쓰기 (0) | 2024.08.20 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!