mapply 함수는 이해하기가 까다로운 함수입니다. 한번 이해하면 쉬운데 감을 잡는 것이 다른 apply 함수들 보다 어렵습니다.
먼저 예시를 하나 봅시다.
> mapply(rep,c(1,2,3),c(2,3,4))
[[1]]
[1] 1 1
[[2]]
[1] 2 2 2
[[3]]
[1] 3 3 3 3
mapply 가 어떤 역할을 하는지 감이 오시나요? 출력 결과가 리스트라는 것은 알 수 있습니다. 위 함수가 입력되면 R에서 어떤 일이 벌어지는지 알아봅시다. mapply 함수의 소스를 뜯어본 것은 아니라 순서는 약간 다를 수 있습니다. 위 함수가 입력되면 R에서는 아래와 같은 일이 벌어집니다.
1) rep(1,2) 가 실행되어 리스트의 첫번째 원소로 들어갑니다.
2) rep(2,3) 이 실행되어 리스트의 두번째 원소로 들어갑니다.
3) rep(3,4) 가 실행되어 리스트의 세번째 원소로 들어갑니다.
4) 리스트가 출력됩니다.
이해가 되시나요? mapply 는 함수를 먼저 입력하고 나서, 벡터나 리스트들을 이어서 입력합니다. 위에서는 함수 rep 를 입력하고 벡터 c(1,2,3) 과 c(2,3,4) 를 입력했습니다. rep 함수는 두가지 인자를 입력해주어야 합니다. rep(1,3) 과 같이 반복의 대상이 되는 값과, 반복의 횟수가 되는 값을 입력해야 합니다. mapply 함수가 작동하면 첫번째 벡터 c(1,2,3) 중에서 첫번째 값인 1이 rep 의 첫번째 인자로, 두번째 벡터 c(2,3,4) 중 첫번째 값인 2가 rep의 두번째 인자 자리에 입력됩니다. 따라서 rep(1,2)가 가장 먼저 실행됩니다. 그 다음은 rep(2,3)가 실행되고, 마지막으로 rep(3,4) 가 실행됩니다. 이것이 mapply 함수의 작동원리입니다.
'R 주제 > R 기초 및 통계 강의' 카테고리의 다른 글
[R강의] 155. 데이터프레임의 여러 열을 합쳐서 변수와 값으로 만들기 (melt) (0) | 2023.04.15 |
---|---|
[R강의] 154. 문자열을 다른 문자열로 대체하기 (sub, gsub) (0) | 2023.04.08 |
[R강의] 152. 벡터의 그룹별로 함수 적용하기 (tapply) (0) | 2023.04.05 |
[R강의] 151. 리스트의 각 원소에 함수 적용하기 (sapply, lapply) (0) | 2023.04.04 |
[R강의] 150. 데이터프레임의 열 방향으로 함수 적용하기 (apply, sapply, lapply) (0) | 2023.04.03 |
댓글