R 프로그래밍 언어에서 사용자 정의 함수와 apply() 함수는 R의 핵심 기능 중 일부입니다. 이 두 기능은 데이터 처리와 변환 작업을 수행할 때 특히 유용합니다. 이 글에서는 사용자 정의 함수의 작성 방법부터, apply() 함수의 다양한 활용 방법까지 간략하게 살펴보겠습니다.

블로그 글을 작성함에 있어서 최대한 정확한 정보를 제공하고자 노력하고 있습니다만, 간혹 오류가 있을 수 있습니다. 발견시 댓글 달아주시면 정정하겠습니다. 블로그의 링크들을 통하여 구매하시면 소정의 커미션이 슬통에 들어옵니다.

R 사용자 정의 함수 설명

r 사용자 정의함수 설명
나만의 함수를 만들어 봅시다!

R에서의 함수(Function)란?

R에서 함수는 특정 작업을 수행하기 위한 코드 블록입니다. 사용자는 함수를 호출하여 해당 작업을 반복적으로 수행할 수 있습니다. R은 많은 내장 함수를 제공하지만 사용자는 필요에 따라 자신만의 함수를 정의할 수 있습니다.

R 함수를 구성하는 요소

R은 CC++PythonPerl 과 같은 블록 구조 (block-structured) 프로그래밍 언어 중 하나입니다. 이러한 언어들의 코드는 다음과 같은 특징들을 가지고 있습니다.

  • {}를 사용하여 블록을 구분
  • 블록 안에 여러 개의 구문들 (statements) 이 존재
  • 구문들은 줄 바꿈 혹은 세미 콜론 ; 으로 구분

다음의 R 코드는 총 4개의 구문이 3줄에 걸쳐서 작성되었다고 볼 수 있습니다.

a <- 3
b <- 2
a; b # 2개 구문
## [1] 3
## [1] 2

R 함수는 블록 {} 안에 여러개의 구문들이 존재하고, 마지막에 결과값을 반환하는 구조로 되어있습니다. 좀 더 자세히 알아보도록 하죠.

R 사용자 정의 함수 만들기

이제까지 많은 R 함수를 사용해왔습니다. 이제는 나만의 R 사용자 정의 함수를 만들어서 사용해보도록 하겠습니다.

R 함수 만들기

R 함수는 function() 함수를 사용하여 정의합니다. 함수에 필요한 내용은 입력값이 무엇인지 알려주는 argument와, 그리고 어떻게 작동하는지를 알려주는 body 부분으로 나눌 수 있습니다.

  • 간단한 R 함수 구조
function_name <- function(input1, input2) {
    result <- input + 1
    return(result)
}

위 코드는 R에서 함수의 기본 구조를 보여주고 있습니다. 아래는 함수의 각 부분에 대한 설명입니다.

  • function_name: 함수의 이름
  • input1, input2: 함수의 입력값, 매개변수(parameter)라고 부름.
  • result: 함수의 반환 값
  • return: 함수의 결과를 반환하는 키워드

R 함수 만들기 예제

다음은 두 숫자를 더하는 간단한 함수입니다. 두 숫자를 입력 받아서 더한 다음, 결과를 출력해주는 것을 확인 할 수 있습니다.

add_numbers <- function(a, b) {
  result <- a + b
  return(result)
}

add_numbers(3, 4)
## [1] 7

R 함수 기본 입력값 설정법

내가 만든 함수의 기본 입력값을 설정하여 사용하는 방법에 대하여 알아봅시다.

입력값 설정에 따른 함수 결과

함수의 입력값에 기본값이 설정이 안 된 경우를 생각해봅시다. 이 경우, 함수를 실행할 때 필요한 입력값을 넣지 않고 실행한다면 함수가 제대로 작동을 하지 않을 것 입니다.

g <- function(x) {
  result <- x + 1
  return(result)
}
g()
## Error in g(): argument "x" is missing, with no default

위의 코드에서는 함수 g()의 입력값으로 설정된 x의 값을 받아야 하는데, 아무런 값을 입력하지 않아서 에러가 발생하고 있습니다.

g <- function(x = 3) {
  result <- x + 1
  return(result)
}
g()
## [1] 4

위에 정의 된 함수 g()는 입력값으로 아무것도 넣지 않아도, 기본으로 x에 3이 입력되어 정상적으로 작동하는 것을 확인 할 수 있습니다.

R 코딩 스타일은 무엇일까?

각 언어에는 그 언어의 사용자들이 많이 사용하는 코딩 스타일이 존재합니다. R 언어에도 많은 스타일이 있지만 tidyverse 스타일 가이드를 많이 사용합니다. 아래는 함수에 관한 스타일 몇 가지를 가져왔으며, 자세한 사항은 tidyverse 스타일 가이드를 참고해주시기 바랍니다.

결과값 반환 함수 return()

R의 함수는 자동으로 마지막 구문을 결과값으로 반환하게 되어있습니다. 따라서 함수를 정의할 때, return() 함수는 결과가 맨 마지막에 반환되지 않을 때만 (early return의 경우) 사용을 권장합니다. 즉, “마지막에 return() 쓰지 말자!”가 주요 내용입니다.

# 좋은 예
find_abs <- function(x) {
    if (x > 0) {
        return(x)
    }
    -1 * x
}

# 나쁜 예
add_two <- function(x, y) {
    return(x + y)
}

함수 이름 정할 때 유의사항

다음은 R 함수의 이름을 정할 때 많이 사용하는 규칙들 입니다.

  1. 변수와 함수 이름은 무조건 영어 소문자, 숫자, 그리고 밑줄 _ 만을 사용합니다. (snake case 규칙)
  2. 함수 이름에 . 사용하는 것은 지양합니다. 추후 배울 OOP를 사용해서 코딩을 할 때 혼란을 초래할 수 있기 때문입니다.

또한 함수나 변수 이름을 정할 때, 사용에 따라서

  • 함수 이름의 경우 동사를 먼저 사용
  • 변수 이름은 명사를 사용

위의 규칙을 사용해서 함수 이름을을 작성하는 예를 살펴보겠습니다.

# Good
add_two()

# Bad
AddTwo()
number_adder()

R apply 함수 이해하기

사각형 데이터 전용 반복문

apply() 함수는 행과 열이 있는 데이터를 사용하여 작업할 때 꼭 알고 있어야 하는 함수입니다. apply() 함수를 사용하면 반복문을 피하여 코딩을 할 수 있기 때문입니다. apply() 함수의 구문은 다음과 같습니다.

apply(object, direction, function, ...)

위 구문에서 object는 행렬 또는 나타내는 객체입니다. direction은 함수를 적용할 방향을 지정하는 인수입니다. direction이 1인 경우 행(row) 방향으로 함수를 적용하고, direction이 2인 경우 열(column) 방향으로 함수를 적용합니다.

  • 1: 행 (row) 별 입력
  • 2: 열 (column) 별 입력

function은 적용할 함수를 지정하는 인수입니다. ...은 function 함수에 전달할 추가적인 입력값을 설정할 수 있다는 뜻 입니다.

a <- matrix(1:12, nrow = 3, ncol = 4)
a
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12

다음의 그림을 보면서 apply() 함수 적용방향에 따른 결과 값 이해해 봅시다.

r apply 함수 설명 그림으로 이해하기
R apply() 함수 이해하기
apply(a, 1, max)
## [1] 10 11 12
apply(a, 2, max)
## [1]  3  6  9 12

R apply 사용자 정의 함수 적용하기

다음과 같은 사용자 정의 함수를 정의했다고 가정합니다.

my_f <- function(vec, const = 3){ 
    max(vec)^2 + const
}

위의 my_f() 함수를 행렬 a에 가로행 들에 적용해 보겠습니다.

apply(a, 1, my_f)
## [1] 103 124 147

my_f() 함수는 입력 값이 2개인 함수입니다. apply() 함수는 자동으로 입력값으로 들어오는 데이터의 행들 혹은 열들을 적용하는 함수의 첫 번째 입력값으로 넣어 줍니다. 다른 입력값을 바꿔서 적용하고 싶은 경우 apply() 함수에 따로 지정해주면 됩니다.

apply(a, 1, my_f, const = 5)
## [1] 105 126 149

위의 코드는 행렬 a에 my_f() 함수를 적용하되, const는 5를 지정해서 실행되는 것을 확인 할 수 있습니다.


본 포스팅은 R 프로그래밍 기초 공략.zip 교재의 일부분 입니다. 본 교재는 R을 독학하시는 분들을 위하여 특별히 제작된 교재입니다. R을 이제 막 시작하셨다면 슬기로운 통계생활과 같이 공부해보세요!

Similar Posts