기본 정의
함수는 다음과 같은 기본 문법을 사용해 정의한다.
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
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 함수 호출 시 인자 지정’ 절에서 다룬 바 있으니 해당 내용을 참고하기 바란다.