Stats & AI tech blog - '일단 시도함'

[R] apply function (apply, sapply, lapply, mapply, vapply) 본문

Programming/R

[R] apply function (apply, sapply, lapply, mapply, vapply)

justdoit ok? 2023. 11. 23. 13:53

1. apply

행 단위 또는 열 단위 연산을 가능하게 한다. 

input 데이터로 모두 같은 타입의 변수형을 가진 배열(Array), 매트릭스(Matrix), 데이터 프레임(Dataframe)이 가능하다.

연산결과는 매트릭스 또는 벡터 형태로 출력된다.

 

* 행 단위, 열 단위 평균 구하기

# calculate row mean
apply(data, 1, mean)
# calculate column mean
apply(data, 2, mean)

 

 

2. sapply

for문을 대체하여 주로 쓰이며연산 결과는 벡터 또는 행렬 형태로 출력된다. 

sapply( , simplify = F) 인 경우 또는 input 데이터가 길이가 다른 리스트인 경우, lapply( ) 와 동일하게 리스트 형태로 출력된다.

 

* 특정 열의 데이터 타입 변경

# change datatype to factor
data[,c(1:4)]<- sapply(data[,c(1:4)], as.factor)

 

 

3. mapply

sapply와 비슷하지만 여러 개의 인자를 사용할 수 있다. 다른 apply함수들과 다르게, 함수를 첫번째로 작성해야한다.

 

* 두 개의 인자로 비교 검정 수행

# mann-whitney test with two variables 
mapply(wilcox.test, df1[,c(1:4)], df2[,c(1:4)])

 

 

4. lapply

연산 결과는 리스트 형태로 출력한다. 리스트의 인자는 데이터의 수 만큼 생성되며, 각 인자의 길이가 달라도 상관없다.

 

* 모델 적합 후 결과를 리스트 형태로 저장

result <- lapply(data[,c(1:4)], function(var){
	model <- glm(y ~ var, data=data)
	summary(model)
    Estimate <- coef(summary(model))[,'Estimate'][-1]
    P.value <- coef(summary(model))[,'P.value'][-1]
    result <- cbind(Estimate, P.value)
})

 

 

5. vapply

sapply와 유사하지만 출력 양식을 지정할 수 있다.

 

* summary() 출력 양식 지정

# summary table
data[,c(1:4)]<- vapply(data[,c(1:4)], summary, c("Min." = 0, "1st Qu." = 0, "Median" = 0, "Mean" = 0, "3rd Qu." = 0, "Max." = 0))