더북(TheBook)

중첩 함수

함수 안에 또 다른 함수를 정의하여 사용할 수 있다. 이를 중첩 함수Nested Function라고 부른다. 다음 코드는 함수 f( ) 안에 함수 g( )를 정의하고, 함수 f( ) 안에서 이를 호출하여 사용하는 예를 보여준다.

> f <- function(x, y) {
+   print(x)
+   g <- function(y) {
+     print(y)
+   }
+   g(y)
+ }
> f(1, 2)
[1] 1
[1] 2

중첩 함수를 사용하면 함수 안에서 반복되는 동작을 한 함수로 만들고 이를 호출하여 코드를 간결하게 표현할 수 있다는 장점이 있다. 또한, 내부 함수가 외부 함수에 정의된 변수를 접근할 수 있어 클로저closure로 사용할 수 있다.

> f <- function(x1) {
+   return(function(x2) {
+     return(x1 + x2)
+   })
+ }
> g <- f(1)
> g(2)   # x1 = 1, x2 = 2
[1] 3
> g2 <- f(2)
> g2(2)  # x1 = 2, x2 = 2
[1] 4

위 코드에서 함수 g( )에는 x1=1, 함수 g2( )에는 x1=2가 지정되었다. 따라서 g(x2)는 1 + x2를, g2(x2)는 2 + x2를 계산한다.

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