더북(TheBook)

기본 정의

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

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 함수 호출 시 인자 지정’ 절에서 다룬 바 있으니 해당 내용을 참고하기 바란다.

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