함수 객체
함수 객체
R에서 함수는 객체이며, 다른 객체와 거의 동일한 방식으로 조작할 수 있어요. 이 섹션에서는 함수 객체의 구조와 동작 방식을 자세히 살펴볼게요.
본문
2.1.5 함수 객체
R에서 함수는 객체이며, 다른 객체와 거의 동일한 방식으로 조작할 수 있어요. 함수(보다 정확히는 함수 클로저, function closure)는 세 가지 기본 구성 요소로 이루어져 있어요: 형식 인자 목록(formal argument list), 본문(body), 그리고 환경(environment)이에요.
인자 목록은 쉼표로 구분된 인자들의 목록이에요. 인자는 심볼(symbol)이거나, symbol = default 형태의 구성이거나, 특별한 인자 ...일 수 있어요. 두 번째 형태의 인자는 인자의 기본값을 지정하는 데 사용돼요. 이 값은 함수가 해당 인자에 대해 어떤 값도 지정하지 않고 호출될 때 사용돼요.
... 인자는 특별해서 인자를 몇 개든 담을 수 있어요. 보통 인자의 개수를 알 수 없거나, 인자를 다른 함수에 전달해야 하는 경우에 사용돼요.
본문은 파싱된 R 문(statement)이에요. 보통 중괄호 안에 여러 문장을 모아 놓은 형태지만, 단일 문장이나 심볼, 상수일 수도 있어요.
함수의 환경은 함수가 생성될 당시 활성화되어 있던 환경이에요. 그 환경에 바인딩된 모든 심볼은 캡처되어 함수에서 사용할 수 있게 돼요. 함수의 코드와 환경의 바인딩을 합친 것을 '함수 클로저(function closure)'라고 부르며, 이는 함수형 프로그래밍 이론에서 온 용어예요. 이 문서에서는 보통 '함수'라는 용어를 사용하지만, 첨부된 환경의 중요성을 강조할 때는 '클로저'라는 용어를 사용할게요.
formals, body, environment 구성을 사용하면 클로저 객체의 세 부분을 추출하고 조작할 수 있어요. 이 세 가지는 모두 할당문의 왼쪽에서도 사용할 수 있답니다. 마지막 environment는 원치 않는 환경 캡처를 제거하는 데 사용할 수 있어요.
함수가 호출되면 *평가 환경(evaluation environment)*이라는 새 환경이 생성되며, 이 환경의 엔클로저(Environments 절 참조)는 함수 클로저의 환경이에요. 이 새 환경은 처음에 함수에 전달된 평가되지 않은 인자들로 채워져요. 평가가 진행되면서 그 안에 지역 변수들이 생성돼요.
또한 as.list와 as.function을 사용해 함수를 리스트 구조로 변환하거나, 리스트 구조에서 함수로 다시 변환할 수도 있어요. 이 기능들은 S와의 호환성을 위해 포함된 것이며, 사용은 권장되지 않아요.