[R] 기초 통계량 계산하는 사용자 함수 만들기

해당 포스트는 네이버지식인을 통해 질문 받은 '두 인자 x,y의 최대값, 최소값, 합계, 분산 및 표준편차를 계산하고 결과를 리스트로 출력하는 방법'에 대한 답변을 공유하는 글입니다. 만약, 최대값/최소값만 찾는 코드가 필요하신 분은 아래 링크를 참고해 주세요.

make-udf-for-calculate-statistical-summary-in-r

질문

두 인자 x, y의 최대값, 최솟값, 합계, 분산, 표준편차를 계산하여 리스트 형태로 결과를 출력하는 함수를 만들어 주세요.

make-udf-for-calculate-statistical-summary-in-r
[출처] 네이버 지식인

풀이

1. 문제 해석

데이터 분석과 통계에서 최댓값(max()), 최솟값(min()), 합계(sum()), 분산(var()), 표준편차(sd())와 같은 요약 통계량을 계산하는 것은 자주 수행하는 작업입니다. 문제에서는 R 내장 함수인 summary()를 사용하지 않고 xy 두 인자를 입력받아 요약 통계량을 계산하는 사용자 함수를 만들도록 지시하고 있습니다.

아래에서는 각 통계 함수들을 이용하여 요약 통계량을 계산해주는 사용자 함수 calculate_summary(x,y)에 대해 설명합니다.

2. 코드 작성

아래에서 설명할 사용자 함수 calculate_summary()xy라는 두 인자를 받도록 정의합니다. 함수 내부에서는 result라는 리스트 객체가 생성되어 계산된 요약 통계량을 저장하며, 함수는 max(), min(), sum(), var(), sqrt()와 같은 내장된 R 함수를 사용하여 xy의 최댓값, 최솟값, 합계, 분산, 표준편차를 계산합니다.
이러한 값을 result 리스트에 리스트 인덱싱을 사용하여 저장하고 함수의 출력으로 반환합니다.

# x와 y의 최댓값, 최솟값, 합계, 분산, 표준편차를 계산하여 리스트 형태로 반환하는 함수
calculate_summary <- function(x, y) {
  result <- list()

  # 최댓값 계산
  result$max <- max(x, y)

  # 최솟값 계산
  result$min <- min(x, y)

  # 합계 계산
  result$sum <- sum(x, y)

  # 분산 계산
  result$variance <- var(c(x, y))

  # 표준편차 계산
  result$standard_deviation <- sqrt(result$variance)

  return(result)
}

# 샘플 데이터 생성 
x <- c(1, 3, 5)
y <- c(2, 4, 6)

# 사용자 함수 확인
output <- calculate_summary(x, y)
output
$max
[1] 6

$min
[1] 1

$sum
[1] 21

$variance
[1] 3.5

$standard_deviation
[1] 1.870829

마무리

해당 포스트에서는 사용자 정의 함수(UDF, User Defined Function)를 만드는 가장 기본 문제요약 통계량 함수를 생성해 보았습니다. R에서 두 숫자 벡터에 대한 요약 통계량을 편리하게 계산하는 사용자 함수 calculate_summary()를 만들어 최댓값, 최솟값, 합계, 분산, 표준편차 값을 리스트 형식으로 반환(return)해 주도록 구현하였으며, 해당 방법을 잘 익히신다면 사용자 함수 정의 연습에 도움이 될 거라 생각합니다.

관련 링크

[1] 네이버 지식인
[2] [R] 최대/최소값 찾는 함수 만들기