더북(TheBook)

02 | 함수 호출 시 인자 지정

R 명령의 대부분은 함수 호출로 이루어진다. 그런데 함수 호출 시 인자를 지정하는 방법이 다른 언어와 다소 차이가 있어 이에 대해서 확실히 알아둘 필요가 있다.

R의 함수 인자는 위치 또는 이름으로 지정할 수 있다. 예를 들어, 다음과 같은 가상의 함수를 생각해보자.

foo(a, b, c=1, d=2)

foo 함수는 a, b, c, d라는 4개의 인자를 받을 수 있으며 c와 d에는 기본값이 지정되어 있으므로 생략이 가능하다. 만약 c 또는 d를 인자로 전달하지 않으면 각각 기본값인 c=1, d=2로 지정된다.

예를 들어, 다음 명령들은 인자 위치에 따라 a=3, b=4, c=1, d=2를 지정하여 함수 foo()를 호출한다.

foo(3, 4)
foo(3, 4, 1)
foo(3, 4, 1, 2)
  다음 명령은 a=3, b=4, c=5를 지정하되 d는 생략했으므로 d=2가 지정되어 foo( )를 호출한다.
foo(3, 4, 5)

만약 인자의 위치가 기억나지 않거나, 인자 c는 지정하지 않으면서 인자 d를 지정하고 싶은 경우처럼 프로토타입의 인자 순서와 다르게 인자를 넘겨주고 싶다면 인자 이름을 명시하여 값을 넘겨줄 수 있다. 또 순서를 지켜 인자를 지정하는 방법과 인자의 이름을 지정하는 방법을 혼용해서 사용할 수도 있다.

다음 명령들은 a=3, b=4, d=5를 지정하며, c를 생략했으므로 c에는 기본값 1이 지정되어 함수 foo()를 호출한다.

foo(a=3, b=4, d=5)
foo(d=5, a=3, b=4)
foo(3, 4, d=5)

R에서는 R 콘솔에서 명령을 하나씩 실행해보면서 개발하는 대화식interactive 개발 방식을 종종 사용한다. 이런 방식의 개발을 편하게 할 수 있도록 R에서는 함수의 인자 이름을 일부만 명시해도 되도록 허용하고 있다. 인자 이름을 일부만 지정하는 경우를 설명하기 위해 다음 함수를 가정해보자.

foo(foobar, foocar=3)

foobar에 1을 지정해 이 함수를 호출하는 일반적인 방법은 foo(foobar=1) 또는 foo(1)이다. 그러나 다음에 보인 것처럼 foobar와 foocar를 구분할 수 있을 정도만 인자 이름을 명시해도 된다.

foo(foob=1)
foo(fooba=1)

두 가지 경우 모두 foobar=1을 인자로 해서 함수 foo()를 호출한다.

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