오늘은 apply 계열 함수에 대해 알아보겠습니다. 이미 앞선 글들에서 일부 다뤘었는데요. `Apply 계열 함수`는 벡터, 행렬 또는 데이터 프레임에 임의의 함수를 적용할 수 있기 때문에 데이터 핸들링하는데 유용합니다.
Apply 계열 함수
먼저, 자세한 사용법을 알아보기 전에 각 Apply 계열 함수들이 어떤 인자를 받고 반환하는지 알아보겠습니다.
- `apply()` : 행렬, 배열, 데이터 프레임에 적용 → 벡터, 배열, 리스트 반환
- `lapply()` : 벡터, 리스트 또는 표현식 → 리스트 반환
- `sapply()` : 벡터, 리스트 또는 표현식 → 벡터, 행렬, 배열 반환
- `mapply()` : 여러 개의 벡터와 리스트를 인자로 받아 함수에 각 데이터의 첫째 요소들을 적용
- `tapply()` : 벡터에 있는 데이터를 특정 기준에 따라 그룹으로 묶은 뒤 그룹마다 함수 적용
apply()
우선, 가장 간단한 `apply()` 함수에 대해 알아보겠습니다.
apply의 인자로 행렬을 주고 각 행, 열 기준으로 합을 구해보겠습니다.
- apply(x, axis, func)
- x : 행렬, 배열, 데이터 프레임
- axis = 1 → 행에 함수 적용 / axis = 2 → 열에 함수 적용
- func : 적용할 함수
- 벡터, 배열, 리스트를 반환할 수 있습니다.
이번에는 인자로 배열을 주겠습니다.
마찬가지로 차원에 상관없이 행, 열의 합을 구하는 것을 확인할 수 있습니다.
lapply()
다음으로 `lapply()` 함수입니다. lapply()는 리스트를 반환하기 때문에 앞에 l이 붙었다고 생각하면 됩니다. 바로 예제를 통해 알아보겠습니다.
lapply()를 이용하여 인자를 벡터로 주고, 익명 함수를 통해 각 벡터의 원소들을 제곱해보겠습니다.
- lapply(x, func, ...)
- x : 벡터, 리스트, 표현식, 데이터 프레임
- func: 적용할 함수
- ... : func의 인자
- 반환형이 리스트인 것을 확인할 수 있습니다.
이번에는 인자로 list 또는 data frame를 주고, 평균 함수를 적용해보겠습니다.
각 리스트, 데이터 프레임의 원소들에 평균 함수가 적용된 것을 확인할 수 있습니다.
sapply()
`sapply()` 는 lapply()와 유사합니다. lapply()는 리스트를 반환하는 반면, `sapply()` 는 벡터 또는 행렬을 반환합니다.
위 예시를 통해, sapply()의 인자로 리스트를 주었을 때, 벡터를 반환하는 것을 확인할 수 있습니다.
mode()를 통해 lapply 와 sapply 반환형을 확인할 수 있습니다.
mapply()
`mapply()`는 sapply()와 유사하나, 다수의 인자를 함수에 적용할 때 사용합니다. 바로 예제를 통해 알아보겠습니다.
mapply()의 다수의 인자로 벡터를 주고 합을 구해보겠습니다.
- mapply(func, ...)
- ... : 함수를 적용시킬 인자들
- 결과 해석 : 12 = 1+4+7 / 15 = 2+5+8 / 18 = 3+6+9
tapply()
`tapply()`는 factor 별로 함수를 적용할 때 사용합니다.
- tapply(x, category_x, func)
- x: 첫번째 인자로 벡터
- category_x : 명목(카테고리)형 변수
- 반환값은 벡터, 행렬, 배열