[Data Science With R] 12. 함수(Function)

2023. 4. 16. 14:51·Data Science/Manipulation

0123456789
(2023.05.31) 2페이지의 stopifnot의 예시가 잘못되었습니다.stopifnot(expr)은 하나 이상의 expr이 참이 아닌경우 stop 함수를 call합니다. 

0. 개요

이번 포스팅에서는 함수(Function)에 대해 간단하게 작성하려고 합니다.

우선 5년 넘게 R을 사용하면서 여러 프로젝트 / 논문 / 분석을 진행해보면서 느끼는건데 파이썬보다 R에서 함수를 직접 작성할 일은 많이 없더라고요. 그래도 함수에 대해 아는 것은 중요하다고 생각이 듭니다.

 

우선 함수 작성을 하는 몇 가지 이점이 존재하는데 책에서는 다음과 같이 소개합니다.

1. 연상시키는 이름을 부여해 코드를 쉽게 이해할 수 있다.

2. 요구사항이 변경되면 함수 내부의 코드만 수정하면 된다.

3. 복사 + 붙여넣기 할 때보다 에러 발생할 가능성이 낮아진다.

즉, 함수는 반복할 일이 있거나(또는 미래에라도) 동작하는 프로그램의 일정 부분을 모듈화하여 각 기능의 unit test를 점검할 때 유용합니다.

1. 함수 작성

R에서는 다음과 같이 함수 작성을 진행합니다.

function_name <- function(arglist) expr

function_name에는 함수의 이름을 들어가고, arglist에는 선택적으로 1개 이상의 파라미터가 들어가게 됩니다. 또한 expr에서 함수 본문 코드를 작성하게 되는데 한 줄인 경우 이어서 바로 작성해도 되지만 두 줄 이상인 경우에는 중괄호를 이용해 단락 내부에서 작성할 수 있습니다.

2. 조건문

함수 내부에서는 유용하게 사용할 수 있는 조건부 실행의 종류에는 2가지가 있으며 각 설명의 생략합니다.

  • 조건문 : if ~ else if ~ else 문
  • 단락평가연산자(||, &&)와 조합하여 사용가능
  • 논리형백터가 입력된 경우 any( ), all( ) 함수를 이용해 단일값으로 축소할 수 있다.
  • 두 객체가 같은지 테스트할때 == 대신 identical을 사용해 논리형 스칼라 값을 반환하게 한다.

 

  • 다중조건문 : switch(EXPR)
  • 위치 또는 이름을 기반으로 선택한 코드를 평가 및 실행

3. 반복문

반복문에는 for(i in object), while(condition), repeat(expr) 함수를 사용할 수 있으며 자세한 설명은 생략합니다.

  • for문 : 반복의 횟수가 정해져 있는 경우 유용

4. 오류제어

함수를 작성하다 보면 다양한 오류에 직면하게 되는데 이럴 때 사용할 수 있는 제어함수에 대해 알고 있으면 도움이 됩니다.

  1. stop("message") : 코드를 중단시키고 오류메시지 출력 (주로 조건문과 함께 사용)
  2. stopifnot(exprs) : 적어도 1개 이상의 expression이 참이 아닌경우 평가를 멈추며 에러메세지 출력
  3. warning("message") : 경고 메세지를 출력
  4. message("message") : 메세지 출력
{
  stopifnot(2==3, 1>0)
  a <- 5
}
{
  stopifnot(2==2, 1>0)
  b <- 5
}
print(a)
print(b)
  • 첫번째 stopifnot에서 2==3이라는 표현은 참이 아니므로 a에 5가 할당되지 않습니다. (단락 내 코드 중단)
  • 두번째 stopifnot에서 2==2와 1>0이라는 표현은 모두 참이므로 b에 5가 할당됩니다.

5. 함수에 유용한 함수

R에서 사용하면 좋은 함수들로 유용하게 사용할 수 있을 거라고 생각드네요!

  • Sys.sleep(x) : x초가 지난뒤 실행되는 함수로 R에서는 주로 리소스 관리할 때 사용합니다(eg 크롤링)
  • proc.time : R 시작후 사용자 및 시스템 시간 및 초과된 시간 출력
  • ... : 함수의 파라미터로 사용되며 임의 개수의 입력을 받아 다른 함수로 전달할 때 사용
  • invisible(object) : 해당 객체를 보이지 않게 반환
  • assign("name", object) : name이라는 변수에 object 할당
  • get("name") : 변수 name의 값을 반환
  • missing(object) : 객체가 입력되었는지 판단하는 함수로 T/F를 반환
  • match.arg(arg, choices) : 문자형 백터 arg가 choices에 존재하면 해당 choices 반환
  • match.fun(FUN) : 문자형 벡터 FUN과 같은 이름의 함수를 주어진 환경에서 찾아 반환
  • substitute : substituting and Quoting Expression 
center <- function(x, type = c("mean", "median", "trimmed")) {
  type <- match.arg(type)
  switch(type,
         mean = mean(x),
         median = median(x),
         trimmed = mean(x, trim = .1))
}
x <- rcauchy(10)
center(x, "t")       # Works
center(x, "med")     # Works
try(center(x, "m"))  # Error

내용이 많아서 함수형(Functional)과 함수공장(Function Factory)은 다음 포스팅에서 다루겠습니다.

 

저작자표시 비영리 변경금지 (새창열림)

'Data Science > Manipulation' 카테고리의 다른 글

[Data Science With R] 14. 반복수행 with purrr  (0) 2023.04.18
[Data Science With R] 13. 함수형(Functional) with Base and purrr  (0) 2023.04.16
[Data Science With R] 11. Time Data with lubridate (202406)  (0) 2023.04.08
[Data Science With R] 10. 범주형 데이터 조작 with forcats (202406)  (0) 2023.04.08
[Data Science With R] 9. 정규표현식(Regular Expression) with Stringr (202406)  (0) 2023.04.04
'Data Science/Manipulation' 카테고리의 다른 글
  • [Data Science With R] 14. 반복수행 with purrr
  • [Data Science With R] 13. 함수형(Functional) with Base and purrr
  • [Data Science With R] 11. Time Data with lubridate (202406)
  • [Data Science With R] 10. 범주형 데이터 조작 with forcats (202406)
임파카
임파카
[ML & Statistics] 모바일 버전에서 수식 오류가 있어 PC 환경에서 접속하는 것을 권장합니다.
  • 임파카
    무기의 스탯(Stat)
    임파카
  • 전체
    오늘
    어제
    • Study (149)
      • Data Science (44)
        • Modeling (18)
        • Manipulation (21)
        • Visualization (4)
      • Statistics (59)
        • Mathmetical Statistics (53)
        • Categorical DA (1)
      • Web Programming (17)
      • AI (26)
        • Machine Learning (16)
        • Deep Learning (10)
      • 활동 및 프로젝트 (3)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
임파카
[Data Science With R] 12. 함수(Function)
상단으로

티스토리툴바