-
행렬구조인 데이터를 다룰 때 각 행, 열 마다 동일한 함수를 실행시킨 결과를 얻고 싶을 때가 있다.
이럴때 반복문을 사용 할 수 있지만, 반복문 대신 간단다게 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