[R] apply 계열 함수

반응형

 

R에서는 벡터, 행렬 또는 데이터 프레임에 어떠한 임의의 함수를 적용하고 그 결과를 받기 위한 apply 계열 함수가 존재합니다. 이를 간단하게 정리해보았습니다.

함수 설명
apply() array 또는 matrix에 주어진 함수를 적용한 뒤 그 결과를 vector, array, list로 반환
lapply() vector, list 또는 표현식에 함수를 적용하여 그 결과를 list로 반환
sapply() lapply()와 유사하지만 결과를 vector, matrix 또는 array로 반환
tapply() 벡터에 있는 데이터를 특정 기준에 따라 그룹으로 묶은 뒤 그룹마다 주어진 함수를 적용하고 그 결과를 반환
mapply() sapply()의 확장버전으로, 여러 개의 vector 또는 list를 인자로 받아 적용

1. apply()

  • apply()는 행렬의 행(row) 또는 열(column) 방향으로 특정 함수를 적용하는데 사용합니다.
    • x : array 또는 matrix
    • MARGIN = 1이면 행 방향, MARGIN = 2이면 열 방향, MARGIN = c(1, 2)이면 행과 열 방향 모두를 의미
    • FUN : 적용하고자 하는 함수
  • apply(x, MARGIN = c(1, 2), FUN)
  • 1~9 값까지 할당되어 있는 행렬을 생성하고 apply() 함수를 적용해본 결과 다음과 같습니다.
    ##      [,1] [,2] [,3]
    ## [1,]    1    4    7
    ## [2,]    2    5    8
    ## [3,]    3    6    9
    apply(mat1, MARGIN = 1, FUN = sum)
    ## [1] 12 15 18
    apply(mat1, MARGIN = 2, FUN = mean)
    ## [1] 2 5 8
  • mat1 <- matrix(1:9, nrow = 3, ncol = 3)
    mat1

2. lapply()

  • 쉽게 list와 apply를 합친 것이라고 생각하시면 됩니다. lapply() 함수는 리스트를 반환합니다.
    • x : vector, list 또는 data.frame
    • FUN : 적용하고자 하는 함수
  • lapply(x, FUN)
  • 예시는 다음과 같습니다.
    ## [[1]]
    ## [1] 3
    ## 
    ## [[2]]
    ## [1] 4
    ## 
    ## [[3]]
    ## [1] 5
  • x <- 1:3
    result <- lapply(x, function(x) {x + 2})
    result
  • 이렇게 list 형태로 반환되는 결과를 다시 벡터로 변환하고 싶다면 unlist() 함수를 이용할 수 있습니다.
    ## [1] 3 4 5
  • unlist(result)
  • lapply() 함수는 list를 인자로도 받을 수 있습니다.
    ## $a
    ## [1] 2
    ## 
    ## $b
    ## [1] 5
  • x <- list(a = 1:3, 
              b = 4:6)
    lapply(x, FUN = mean)

3. sapply()

  • sapply()lapply()와 유사하지만 list 대신 matrix, vector 등의 데이터 타입으로 결과를 반환시킬 수 있는 특징이 있습니다.
    • x : vector, list 또는 data.frame
    • FUN : 적용하고자 하는 함수
  • sapply(x, FUN)
  • 기본적으로 내장되어 있는 iris 데이터로 쉽게 예시를 들어 보겠습니다.
    ## $Sepal.Length
    ## [1] 5.843333
    ## 
    ## $Sepal.Width
    ## [1] 3.057333
    ## 
    ## $Petal.Length
    ## [1] 3.758
    ## 
    ## $Petal.Width
    ## [1] 1.199333
    sapply(iris[, 1:4], FUN = mean)
    ## Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    ##     5.843333     3.057333     3.758000     1.199333
    • 이와 같이 lapply() 함수를 list로 결과를 반환하지만 sapply() 함수는 vector로 결과를 반환합니다.
  • lapply(iris[, 1:4], FUN = mean)

4. tapply()

  • tapply()는 그룹별로 함수를 적용하기 위한 apply() 함수라고 생각하시면 됩니다.
    • x : vector
    • INDEX : factor형 변수(그룹)
    • FUN : 적용하고자 하는 함수
  • tapply(x, INDEX, FUN)
  • 이번에도 기본적으로 내장되어 있는 iris 데이터로 쉽게 예시를 들어 보겠습니다.
    ##     setosa versicolor  virginica 
    ##      5.006      5.936      6.588
  • tapply(iris$Sepal.Length,
           INDEX = iris$Species,
           FUN = mean)

반응형

'Basic' 카테고리의 다른 글

[R] DescTools  (0) 2017.11.01
[R] ggplot2 활용 데이터 시각화 예시  (0) 2017.08.17
[R] 문자열 처리  (0) 2017.07.12
[R] 추정 및 검정  (0) 2017.07.12
[R] 상관 분석  (0) 2017.07.07
TAGS.

Comments