12.4 apply() 함수

apply 계열의 함수도 반복 패턴을 제공하지만 보다 간결한 형태로 제공된다. 이 유형의 함수는 다양한 R 패키지와 base R에서도 사용된다. 일반적인 패턴은 벡터, 데이터 프레임 또는 리스트와 같은 개체를 전달하여 apply() 함수를 사용하는 것이며 apply() 함수는 각각을 반복한다. 그 개체의 요소별로 apply() 함수에 각 요소에 대해 실행할 코드를 제공하면 그 함수가 적용되어 새 개체를 반환한다.

지금까지 반복했던 것을 출력하려면 다음과 같이 할 수 있다.

sapply(1:5, function(x) {print(x)})
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 1 2 3 4 5

이것은 훨씬 더 깔끔하고, 우리는 벡터 1:5와 실행할 코드 만 가지고 있다. 코드는 “anonymous function(익명 함수)”이며 함수는 다음에 자세히 설명된다. 기본적으로 벡터의 현재 값에 대한 자리 표시자인 하나의 매개 변수 x가 있는 함수를 정의하고 중괄호 사이에는 벡터에 있는 각 요소에 대해 실행할 코드가 있다.

여기서는 sapply() 함수를 사용했으며 이 버전의 apply() 함수는 단순화된 객체 (이 경우 벡터)를 반환한다. 위의 경우 동일한 벡터를 다시 얻는다. 그러나 다음과 같은 작업을 수행할 수도 있다.

sapply(1:5, function(x){
        x * 2
})
## [1]  2  4  6  8 10

코드를 좀 더 명확하게하기 위해 여기서 익명 함수를 사용하였다. 이 코드는 이를 콘솔에 인쇄할 새 벡터를 생성한다.

## [1] 2 4 6 8 10

apply 함수는 가장 단순한 개체를 반환하는 일반적인 래퍼 함수이다. 동일한 방식으로 작동하지만 리스트 객체를 반환하는 리스트 및 데이터 프레임에 사용되는 lapply도 있다.