[R] purrr 라이브러리 내 map() 함수 이해하기
반응형
## [1] "ko_KR.UTF-8"
purrr
- 이번 포스팅에서는
purrr
라이브러리에서 주로 다루는 함수에 대해서 정리해보겠습니다. purrr
라이브러리는tidyverse
라이브러리를 구동할 때 같이 불러오는 라이브러리 중 하나 입니다.tidyverse
에서purrr
를 소개하기로는.. 함수형 프로그래밍 도구(functional programming toolkit)라는 표현을 하고 있습니다.- 여기서는
purrr
라이브러리 내map()
함수에서만 짧게 소개하겠습니다.
map_*()
- 여러 함수(커스텀 함수 등을 포함)들을 적용하여 반복 계산을 조금 더 용이하게 해주는 함수입니다.
- 일단 기본함수인
map()
은 객체.x
에 대해 특정 함수.f
를 적용하여 해당 결과를 리스트로 출력해줍니다.map(.x, .f)
lapply()
함수와 유사한 성격을 갖는다고 이해하시면 됩니다.
- 아래 예시를 살펴보겠습니다.
tibble(iris) %>%
select(-Species) %>%
map(mean, data = .x)
## $Sepal.Length
## [1] 5.843333
##
## $Sepal.Width
## [1] 3.057333
##
## $Petal.Length
## [1] 3.758
##
## $Petal.Width
## [1] 1.199333
- 위의 결과물을 숫자형 벡터형으로 내리고 싶다면,
flatten_dbl()
함수를 사용하시면 됩니다.
tibble(iris) %>%
select(-Species) %>%
map(mean, data = .x) %>%
flatten_dbl()
## [1] 5.843333 3.057333 3.758000 1.199333
- 물론
flatten_dbl()
함수 없이 출력 결과물이list
형태가 아닌 숫자형 벡터형태로 받고 싶다면map_dbl()
함수를 사용하시면 됩니다.sapply()
함수와 유사한 성격을 갖습니다.
tibble(iris) %>%
select(-Species) %>%
map_dbl(mean, data = .x)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.843333 3.057333 3.758000 1.199333
- 문자형으로 받고 싶다면?
map_chr()
tibble(iris) %>%
select(-Species) %>%
map_chr(mean, data = .x)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## "5.843333" "3.057333" "3.758000" "1.199333"
- 데이터프레임으로 받고 싶다면?
map_df()
tibble(iris) %>%
select(-Species) %>%
map_df(mean, data = .x)
## # A tibble: 1 x 4
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## <dbl> <dbl> <dbl> <dbl>
## 1 5.84 3.06 3.76 1.20
- 이 밖에 정수형은
map_int()
, 논리형은map_lgl()
함수를 이용하면 됩니다.
- 아래 두 1번, 2번 표현의 차이를 한 번 생각해볼까요?
# 1번
tibble(iris) %>%
select(-Species) %>%
map_dbl(~mean(.x))
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.843333 3.057333 3.758000 1.199333
# 2번
tibble(iris) %>%
select(-Species) %>%
map_dbl(mean, data = .x)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 5.843333 3.057333 3.758000 1.199333
- 결과물은 똑같지만
map_dbl()
안에 input들이 살짝 상이합니다. purrr
에서는 함수에 대한 정의를 할 때~
기호를 사용하여~
이하부터는 함수라는 것을 명시할 수 있습니다.- 그리고 input이 되는 객체 값을
.x
로 표시합니다. 아래 코드를 보면 이해가 쉬울겁니다.
a <- 1:5
a
## [1] 1 2 3 4 5
map_dbl(a, ~.x + 1)
## [1] 2 3 4 5 6
- map을 더욱 더 쉽게 이해시켜줄만한 그림이 있어서 같이 첨부해봅니다. 출처
반응형
'tidyverse' 카테고리의 다른 글
[R] 14. 피벗팅(pivotting) (0) | 2021.07.14 |
---|---|
[R] 13. 분산분석(ANOVA) (0) | 2021.07.14 |
[R] 12. 카이제곱 검정(chi-squared test) (0) | 2021.07.13 |
[R] 11. t-Test (0) | 2021.07.13 |
[R] 10. 피어슨 상관계수(Pearson's Corrleation) (0) | 2021.07.06 |
TAGS.