ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • apply
    R 2021. 5. 31. 15:54

     

    행렬구조인 데이터를 다룰 때 각 행, 열 마다 동일한 함수를 실행시킨 결과를 얻고 싶을 때가 있다.

    이럴때 반복문을 사용 할 수 있지만, 반복문 대신 간단다게 apply family를 이용 할 수 있다.

    apply 함수는 input, output 종류에 따라 apply(), lapply() , sapply(), vapply(), mapply(), rapply()tapply(), by() 가 있는데 이들을 통틀어 apply family라고 부른다.

     

    사용법

    apply(dataset, MARGIN, FUN, ...)
    
    dataset : apply를 적용할 dataset
    MARGIN : 차원을 넣어준다. 통상적으로 1차원은 행, 2차원은 열이다. 차원이 많아져서 3, 4...로 가도 상관없다.
    FUN : 적용할 함수를 적어준다.

     

    사용 예

    apply는 반복문을 대체해서 사용 할 수 있는 함수라고 했다.

    다음의 예시 매트릭스를 놓고 생각해보자.

    > matrix_1 <- matrix(1:30, 5, 6)
    > matrix_1
         [,1] [,2] [,3] [,4] [,5] [,6]
    [1,]    1    6   11   16   21   26
    [2,]    2    7   12   17   22   27
    [3,]    3    8   13   18   23   28
    [4,]    4    9   14   19   24   29
    [5,]    5   10   15   20   25   30

    matrix_1 의 각 열들의 합을 백터로 반환해보겠다.

    > matrix_1_col_sum <- vector()
    
    > for (i in 1:ncol(matrix_1)){
    +   matrix_1_col_sum <- c(matrix_1_col_sum,sum(matrix_1[,i]))
    + }
    
    > matrix_1_col_sum
    
    [1]  15  40  65  90 115 140

    간단하게 for문을 사용해서 각 열들의 합을 구했다. 이제 이것을 반복문이 아닌 apply를 써보자.

    > matrix_1_col_sum <- apply(matrix_1, 2, sum)
    
    > matrix_1_col_sum
    [1]  15  40  65  90 115 140

    반복문 대신 사용하니 코드가 간결해졌다. 예제가 워낙 단순하다보니 반복문을 사용한 코드도 짧게 할 수 있었는데, 더 복잡한 예제였으면 apply로 간결하게 코딩하는 것이 더 효율적이다.

     

    마지막으로 배열에서의 예시를 살펴 보자.

    3차원으로 구성된 example_array의 세번째 차원들의 최대값을 반환해주는 코드다.

    > example_array <- array(1:18, c(3,3,2))
    > example_array
    , , 1
    
         [,1] [,2] [,3]
    [1,]    1    4    7
    [2,]    2    5    8
    [3,]    3    6    9
    
    , , 2
    
         [,1] [,2] [,3]
    [1,]   10   13   16
    [2,]   11   14   17
    [3,]   12   15   18
    
    > apply(example_array, 3, max)
    [1]  9 18

     

     

    참고

    https://www.datacamp.com/community/tutorials/

    https://csgillespie.github.io/efficientR/programming.html#the-apply-family

    728x90

    'R' 카테고리의 다른 글

    grep, grepl  (0) 2020.09.16
Designed by Tistory.