기본 정의

    함수는 다음과 같은 기본 문법을 사용해 정의한다.

    function_name <- function(인자, 인자, ...) {
      함수 본문
      return(반환 값)  # 반환 값이 없다면 생략
    }
    

    예를 들어, 다음은 피보나치 함수를 구현한 예다.

    > fibo <- function(n) {
    +   if (n == 1 || n == 2) {
    +     return(1)
    +   }
    +   return(fibo(n - 1) + fibo(n - 2))
    + }
    > fibo(1)
    [1] 1
    > fibo(5)
    [1] 5
    
    <Warning>

    R에서 함수를 정의하는 방법은 이처럼 다른 언어의 함수 정의와 유사하지만 몇 가지 차이점이 있다.

    첫째는 값 반환 시 ‘return 반환 값’ 형태가 아니라 함수 호출을 하듯이 ‘return(반환 값)’ 형태로 작성해야 한다는 점이다.

    둘째는 return( )을 생략하면 함수에서 마지막 문장의 반환 값이 함수의 반환 값이 된다는 점이다. 이 점을 이용하면 fibo( ) 함수를 다음과 같이 고쳐 쓸 수 있다.

      fibo <- function(n) {
        if (n == 1 || n == 2) {
          1
        } else {
          fibo(n - 1) + fibo(n - 2)
        }
      }
    

    그러나 보통은 return( )을 적어주어 코드의 의도를 명확히 한다.

    함수를 호출할 때는 인자의 위치를 맞춰서 값을 넘겨주는 방식, 인자의 이름을 지정해서 넘겨주는 방식 두 가지 모두 가능하다. 다음은 이 두 가지 방식을 모두 보여주는 예다.

    > f <- function(x, y) {
    +   print(x)
    +   print(y)
    + }
    > f(1, 2)      # 인자의 위치에 맞춘 전달
    [1] 1
    [1] 2
    > f(y=1, x=2)  # 인자 이름 지정 방식으로 전달
    [1] 2
    [1] 1
    

    그 외 함수 호출 방법에 대한 다양한 예를 ‘2.2 함수 호출 시 인자 지정’ 절에서 다룬 바 있으니 해당 내용을 참고하기 바란다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.