18.2 lapply() 함수

lapply() 함수는 다음과 같은 간단한 일련의 작업을 수행합니다.

  1. 리스틀 반복하며 해당 리스트의 각 요소에 반복적으로 적용합니다.
  2. 리스트의 각 요소에 함수를 적용합니다(사용자가 지정한 함수).
  3. 결과로 리스트를 반환합니다 (lapply() 함수의 l은 “list”를 나타냅니다).

lapply() 함수의 형식은 다음과 같습니다.

lapply(X, FUN, ...)

  • x : 리스트 개체입니다.
  • FUN : 적용하는 함수입니다.
  • ... : 함수에 전달되는 다른 인수를 위한 것입니다.

예를 들기 위해 4 개의 요소로 구성되는 리스트를 먼저 생성하겠습니다. 그리고 이 리스트의 요소별 평균을 구해 보겠습니다.

# 4 개의 요소로 구성되는 리스트를 생성합니다.
data <- list(item1 = 1:4, 
             item2 = rnorm(10), 
             item3 = rnorm(20, 1), 
             item4 = rnorm(100, 5))

# 리스트의 각 요소의 평균을 구합니다.
lapply(data, mean)
## $item1
## [1] 2.5
## 
## $item2
## [1] 0.2699883
## 
## $item3
## [1] 1.383788
## 
## $item4
## [1] 5.090595

위는 각 리스트 항목이 단순히 숫자형의 벡터인 간단한 예를 들고 있습니다. 그러나 데이터 프레임이 포함된 리스트를 생각해 볼 수 있습니다. 각 리스트의 항목에 반복적으로 적용하여 데이터 프레임에 대한 항수를 수행해 보겠습니다. 이 경우 lapply() 함수 내에 apply 함수를 삽입할 수도 있습니다.

예를 들어, 다음은 R의 내장 beaver 데이터 세트에 대한 리스트를 만듭니다. lapply() 함수는 두 리스트 항목을 각각 반복하고 apply() 함수를 사용하여 두 리스트 항목의 열 평균을 계산하겠습니다. 더 쉽게 읽을 수있는 출력을 제공하기 위해 apply() 함수를 round() 함수로 묶어 주었습니다.

# R에 내장된 beaver 데이터 세트를 리스트로 변형합니다.
beaver_data <- list(beaver1 = beaver1, 
                    beaver2 = beaver2)

# 각 리스트 항목의 평균을 구하여 리스트로 반환합니다.
lapply(beaver_data, 
       function(x) round(apply(x, 2, mean), 2))
## $beaver1
##     day    time    temp   activ 
##  346.20 1312.02   36.86    0.05 
## 
## $beaver2
##     day    time    temp   activ 
##  307.13 1446.20   37.60    0.62