더북(TheBook)

apply()

apply( )는 행렬의 행 또는 열 방향으로 특정 함수를 적용하는 데 사용한다.

표 4-7 apply( ) 함수

apply : 배열 또는 행렬에 함수 FUN을 MARGIN 방향으로 적용하여 결과를 벡터, 배열 또는 리스트로 반환한다.

apply(
  X,       # 배열 또는 행렬
  MARGIN,  # 함수를 적용하는 방향. 1은 행 방향, 2는 열 방향
           # c(1, 2)는 행과 열 방향 모두를 의미
  FUN      # 적용할 함수
)

반환 값은 FUN이 길이 1인 벡터들을 반환한 경우 벡터, 1보다 큰 벡터들을 반환한 경우 행렬, 서로 다른 길이의 벡터를 반환한 경우 리스트다.

apply( )가 적용된 결과가 벡터, 배열, 리스트 중 어떤 형태로 반환될 것인지는 데이터 X의 데이터 타입과 함수 FUN의 반환 값에 따라 대부분 자연스럽게 예상할 수 있으므로, 반환 값의 데이터 타입에 대해 크게 걱정할 필요는 없다. 또, 반환 값을 str( )로 검토하면 데이터 타입을 알아낼 수 있다는 점을 기억하기 바란다.

합을 구하는 함수 sum( )을 apply( )에 적용하는 예에 대해 알아보자. sum( )은 인자로 주어진 값들의 합을 구하는 간단한 함수다. 예를 들어, 다음은 1부터 10까지의 합을 계산한다.

> sum(1:10)
[1] 55

이를 사용해 apply( )로 행렬에 저장된 데이터의 합을 구해보자. 예를 들어, 다음과 같은 행렬이 있다고 하자.

> d <- matrix(1:9, ncol=3)
> d
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

이 행렬의 각 행의 합(즉, 1+4+7, 2+5+8, 3+6+9)을 구하려면 apply를 행별로(즉, MARGIN에 1을 지정) 처리하되 각 행에 대해 sum 함수를 호출하면 된다.

> apply(d, 1, sum)
[1] 12 15 18

마찬가지로 열 방향 합(1+2+3, 4+5+6, 7+8+9)은 MARGIN=2를 지정해 구한다.

> apply(d, 2, sum)
[1] 6 15 24
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.