예제를 포함한 R apply(), lapply(), sapply(), tapply()

이 튜토리얼은 apply() 함수 컬렉션을 소개하는 것을 목표로 합니다. apply() 함수는 모든 컬렉션 중 가장 기본적인 함수입니다. sapply(), lapply(), tapply()도 배워보겠습니다. Apply 컬렉션은 루프를 대체하는 것으로 볼 수 있습니다.

apply() 컬렉션은 다음과 함께 번들로 제공됩니다. r 필수 만약 당신이 패키지 Anaconda와 함께 R 설치. R 함수의 apply는 객체 컬렉션(데이터 프레임, 리스트, 벡터 등)에 중복된 적용을 수행하기 위해 많은 함수와 함께 제공될 수 있습니다. apply()의 목적은 주로 루프 구조의 명시적 사용을 피하는 것입니다. 입력 리스트, 행렬 또는 배열에 사용할 수 있으며 함수를 적용할 수 있습니다. 모든 함수는 apply()에 전달될 수 있습니다.

적용() 함수

대다() 데이터 프레임이나 행렬을 입력으로 사용하고 벡터, 목록 또는 배열로 출력을 제공합니다. 적용하다 R의 함수 주로 루프 구조의 명시적 사용을 피하기 위해 사용됩니다. 행렬에 사용할 수 있는 모든 컬렉션 중 가장 기본적인 것입니다.

이 함수는 3개의 인수를 사용합니다.

apply(X, MARGIN, FUN)
Here:
-x: an array or matrix
-MARGIN:  take a value or range between 1 and 2 to define where to apply the function:
-MARGIN=1`: the manipulation is performed on rows
-MARGIN=2`: the manipulation is performed on columns
-MARGIN=c(1,2)` the manipulation is performed on rows and columns
-FUN: tells which function to apply. Built functions like mean, median, sum, min, max and even user-defined functions can be applied>

가장 간단한 예는 모든 열에 대한 행렬을 합산하는 것입니다. apply(m1, 2, sum) 코드는 sum 함수를 행렬 5×6에 적용하고 데이터세트에서 액세스할 수 있는 각 열의 합계를 반환합니다.

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)
m1
a_m1 <- apply(m1, 2, sum)
a_m1

출력:

R의 Apply() 함수 예
R의 apply() 함수 예

모범 사례: 콘솔에 인쇄하기 전에 값을 저장합니다.

lapply() 함수

랩플리() 함수는 리스트 객체에 대한 연산을 수행하는 데 유용하며 원래 세트와 같은 길이의 리스트 객체를 반환합니다. lappy()는 입력 리스트 객체와 비슷한 길이의 리스트를 반환하며, 각 요소는 리스트의 해당 요소에 FUN을 적용한 결과입니다. R의 Lapply는 리스트, 벡터 또는 데이터 프레임을 입력으로 받고 리스트로 출력을 제공합니다.

lapply(X, FUN)
Arguments:
-X: A vector or an object
-FUN: Function applied to each element of x	

lapply()의 l은 목록을 나타냅니다. lapply()와 apply()의 차이점은 출력 반환에 있습니다. lapply()의 출력은 목록입니다. lapply()는 데이터 프레임 및 목록과 같은 다른 개체에 사용할 수 있습니다.

lapply() 함수에는 MARGIN이 필요하지 않습니다.

매우 쉬운 예는 tolower 함수를 사용하여 행렬의 문자열 값을 소문자로 변경하는 것입니다. 우리는 유명한 영화의 이름으로 행렬을 구성합니다. 이름은 대문자 형식입니다.

movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")
movies_lower <-lapply(movies, tolower)
str(movies_lower)

출력:

## List of 4
## $:chr"spyderman"
## $:chr"batman"
## $:chr"vertigo"
## $:chr"chinatown"

unlist()를 사용하여 목록을 벡터로 변환할 수 있습니다.

movies_lower <-unlist(lapply(movies,tolower))
str(movies_lower)

출력:

##  chr [1:4] "spyderman" "batman" "vertigo" "chinatown"

sapply() 함수

서플리() 함수는 목록, 벡터 또는 데이터 프레임을 입력으로 사용하고 벡터 또는 데이터 프레임으로 출력을 제공합니다. 매트릭스. 리스트 객체에 대한 연산에 유용하며 원래 세트와 같은 길이의 리스트 객체를 반환합니다. R의 Sapply 함수는 lapply() 함수와 동일한 작업을 수행하지만 벡터를 반환합니다.

sapply(X, FUN)
Arguments:
-X: A vector or an object
-FUN: Function applied to each element of x

cars 데이터셋을 통해 자동차의 최소 속도와 정지 거리를 측정할 수 있습니다.

dt <- cars
lmn_cars <- lapply(dt, min)
smn_cars <- sapply(dt, min)
lmn_cars

출력:

## $speed
## [1] 4
## $dist
## [1] 2
smn_cars

출력:

## speed  dist 
##     4     2
lmxcars <- lapply(dt, max)
smxcars <- sapply(dt, max)
lmxcars

출력:

## $speed
## [1] 25
## $dist
## [1] 120
smxcars

출력:

## speed  dist 
##    25   120

lapply() 또는 sapply()에 사용자 내장 함수를 사용할 수 있습니다. 벡터의 최소값과 최대값의 평균을 계산하기 위해 avg라는 함수를 만듭니다.

avg <- function(x) {  
  ( min(x) + max(x) ) / 2}
fcars <- sapply(dt, avg)
fcars

산출

## speed  dist
##  14.5  61.0

R의 Sapply는 반환된 출력에서 ​​lapply()보다 더 효율적입니다. sapply()는 값을 벡터에 직접 저장하기 때문입니다. 다음 예에서는 이것이 항상 그런 것은 아니라는 것을 알게 될 것입니다.

다음 표에서는 apply(), sapply() 및 lapply()의 차이점을 요약할 수 있습니다.

함수 인수 목표 입력 산출
대다 적용(x, 마진, 재미) 행이나 열 또는 둘 다에 함수 적용 데이터 프레임 또는 매트릭스 벡터, 목록, 배열
라플리 라플라이(X, FUN) 입력의 모든 요소에 함수 적용 목록, 벡터 또는 데이터 프레임 명부
살포하다 서플리(X, FUN) 입력의 모든 요소에 함수 적용 목록, 벡터 또는 데이터 프레임 벡터 또는 행렬

슬라이스 벡터

lapply() 또는 sapply()를 상호 교환하여 사용하여 데이터 프레임을 분할할 수 있습니다. 숫자 값의 벡터를 가져와 평균보다 엄격하게 높은 값만 포함하는 벡터를 반환하는 함수 below_average()를 만듭니다. 두 결과를 동일() 함수로 비교합니다.

below_ave <- function(x) {  
    ave <- mean(x) 
    return(x[x > ave])
}
dt_s<- sapply(dt, below_ave)
dt_l<- lapply(dt, below_ave)
identical(dt_s, dt_l)

출력:

## [1] TRUE

tapply() 함수

태플리() 벡터의 각 요인 변수에 대한 측정값(평균, 중앙값, 최소값, 최대값 등) 또는 함수를 계산합니다. 벡터의 하위 집합을 만든 다음 각 하위 집합에 일부 기능을 적용할 수 있는 매우 유용한 기능입니다.

tapply(X, INDEX, FUN = NULL)
Arguments:
-X: An object, usually a vector
-INDEX: A list containing factor
-FUN: Function applied to each element of x

데이터 과학자나 연구자의 업무 중 일부는 변수의 요약을 계산하는 것입니다. 예를 들어, 특성을 기준으로 평균 또는 그룹 데이터를 측정합니다. 대부분의 데이터는 ID, 도시, 국가 등으로 그룹화됩니다. 그룹에 대한 요약은 더 흥미로운 패턴을 보여줍니다.

작동 방식을 이해하기 위해 붓꽃 데이터 세트를 사용해 보겠습니다. 이 데이터 세트는 기계 학습 세계에서 매우 유명합니다. 이 데이터 세트의 목적은 Sepal, Versicolor, Virginica의 세 가지 꽃 종 각각의 클래스를 예측하는 것입니다. 데이터세트는 각 종의 길이와 너비에 대한 정보를 수집합니다.

이전 작업으로 각 종의 길이 중앙값을 계산할 수 있습니다. R의 Taply는 이 계산을 수행하는 빠른 방법입니다.

data(iris)
tapply(iris$Sepal.Width, iris$Species, median)

출력:

##     setosa versicolor  virginica 
##        3.4        2.8        3.0