본문 바로가기
9.유용한 함수모음/apply 함수

[R] apply/ lapply/ sapply/ tapply/ mapply 함수 한눈에보기

by makhimh 2020. 12. 24.
반응형
함수이름 예시 역할
apply apply(x,1,mean) - 행렬, 배열, 데이터프레임에 사용
- 행방향 또는 열방향으로 함수 일괄 적용
lapply lapply(x,mean) - 리스트에 적용
- 리스트 형태로 결과 반환
- 행렬, 벡터에도 적용가능한데 의미는 없음
sapply sapply(x,mean) - 리스트에 적용
- 행렬 형태로 결과 반환
- 행렬, 벡터에도 적용가능한데 의미는 없음
tapply tapply(vec,fac,mean) - 입력된 벡터를, 요인 수준에 따라 함수 적용
mapply mapply(rep,times=4,li) - 사용할 함수의 input이 여러개인 경우 사용
- 나머지는 sapply 와 동일(리스트에적용)
- 행렬, 벡터에도 적용가능한데 의미는 없음

 

1. apply 함수

 

행렬을 하나 정의합시다. 

 

> m=matrix(1:12,3)
> m
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

 

apply 함수를 적용합시다. 1은 행방향(좌->우), 2는 열방향(상->하) 입니다. 함수는 평균을 구하는 함수를 입력하였습니다. 

 

> apply(m,1,mean)
[1] 5.5 6.5 7.5
> apply(m,2,mean)
[1]  2  5  8 11

 

 

2. lapply 함수

 

리스트를 하나 정의합시다. 

 

> li=list(1:3,4:6,7:9)
> li
[[1]]
[1] 1 2 3

[[2]]
[1] 4 5 6

[[3]]
[1] 7 8 9

 

lapply 함수를 적용합시다. 함수는 평균을 구하는 함수를 입력하였습니다. 

 

> lapply(li,mean)
[[1]]
[1] 2

[[2]]
[1] 5

[[3]]
[1] 8

 

 

3. sapply 함수

 

리스트를 하나 정의합시다. 

 

> li=list(1:3,4:6,7:9)
> li
[[1]]
[1] 1 2 3

[[2]]
[1] 4 5 6

[[3]]
[1] 7 8 9

 

sapply 함수를 적용합시다. 함수는 평균을 구하는 함수를 입력하였습니다. 

 

> sapply(li,mean)
[1] 2 5 8

 

 

4. tapply 함수

 

벡터 하나와 요인 하나를 정의합시다. 

 

> v=1:10
> v
 [1]  1  2  3  4  5  6  7  8  9 10
> f=factor(c(1,1,1,1,2,2,2,2,2,2))
> f
 [1] 1 1 1 1 2 2 2 2 2 2
Levels: 1 2

 

tapply 함수를 적용합시다. 함수는 평균을 구하는 함수를 입력하였습니다. 

 

> tapply(v,f,mean)
  1   2 
2.5 7.5 

 

설명을 추가하면, 요인의 레벨 1에 해당되는 1,2,3,4의 평균이 구해지고, 레벨 2에 해당되는 4,5,6,7,8,9,10 의 평균이 구해진 것입니다. 

 

 

5. mapply 함수

 

리스트를 하나 정의합시다. 

 

> li=list(1:3,4:6,7:9)
> li
[[1]]
[1] 1 2 3

[[2]]
[1] 4 5 6

[[3]]
[1] 7 8 9

 

mapply 함수를 적용합시다. 함수가 먼저 오고, 함수의 설정값, 리스트 순으로 입력합니다. 

 

> mapply(rep,times=4,li)
      [,1] [,2] [,3]
 [1,]    1    4    7
 [2,]    2    5    8
 [3,]    3    6    9
 [4,]    1    4    7
 [5,]    2    5    8
 [6,]    3    6    9
 [7,]    1    4    7
 [8,]    2    5    8
 [9,]    3    6    9
[10,]    1    4    7
[11,]    2    5    8
[12,]    3    6    9
반응형

댓글