6. Apply() 함수


r

Overview

R에서 제공하는 자료 구조(Data structure)에서 apply 함수를 좀 더 알아본다.


apply 함수

R에는 벡터, 행렬, 데이터 프레임에 임의의 함수를 적용한 결과를 얻어 내기 위한 apply 계열 함수가 있다. 이 함수들은 데이터 전체(벡터, 행렬, 리스트, 데이터 프레임)에 대하여 함수를 적용시키는 벡터 연산을 수행하며 속도가 빠르다.

함수설명특징
apply()배열이나 행렬에 주어진 함수를 적용한 결과를 벡터, 배열 , 리스트로 반환배열 또는 행렬에 적용
lapply()벡터, 리스트, 표현식에 함수를 적용한 결과를 리스트로 반환결과가 리스트
sapply()lapply()와 유사하지만 결과를 벡터, 행렬, 배열로 반환결과가 벡터, 배열, 행렬
tapply()벡터에 있는 데이터를 특정 기준에 따라 그룹으로 묶고, 각그룹마다 주어진 함수를 적용한 결과를 반환데이터를 그룹으로 묶어 함수를 적용
mapply()sapply() 함수의 확장
여러 개의 벡터, 리스트를 인자로 받아 함수에 각 데이터의 첫째, 둘째, 셋째 요소들을 각각 적용한 결과를 반환
여러 데이터를 함수의 인자로 적용

apply()의 사용

사용 형식 : apply( x, margin, fun)

매개 변수설명
x배열, 행렬
margin함수를 적용하는 방향.
1 : 행, 2 : 열
fun적용할 함수(sum, mean 등)

apply() 실습

# apply() 함수 사용
somedata = cbind(x1 = 3, x2 = c(4:1, 2:8))
 
dimnames(somedata)[[1]] = letters[1:11]

mode(somedata) # numeric
class(somedata) # matrix 
somedata
#   x1 x2
# a  3  4
# b  3  3
# c  3  2
# d  3  1
# e  3  2
# f  3  3
# g  3  4
# h  3  5
# i  3  6
# j  3  7
# k  3  8

letters[1:5]
LETTERS[1:5]

dimnames(somedata)[[1]] = letters[1:11]
somedata

# 각 열(두 번째 매개 변수가 숫자 2이다.)에 대하여 평균 구하기
apply(somedata, 2, mean)
#      x1       x2 
# 3.000000 4.090909 
 
colMeans( somedata )
#      x1       x2 
# 3.000000 4.090909 
 
# 각 열(두 번째 매개 변수가 숫자 2이다.)에 대하여 총합 구하기
apply(somedata, 2, sum)
# x1 x2 
# 33 45 
 
colSums ( somedata )
# x1 x2 
# 33 45 
 
# 각 행에 대하여 총합 구하기
apply(somedata, 1, sum) # 숫자 1은 행
# a  b  c  d  e  f  g  h  i  j  k 
# 7  6  5  4  5  6  7  8  9 10 11 
 
rowSums( somedata )
# a  b  c  d  e  f  g  h  i  j  k 
# 7  6  5  4  5  6  7  8  9 10 11 

sapply() 실습


# sapply() 함수는 행렬, 벡터 등의 데이터 타입으로 결과를 반환해주는 특징이 있는 함수이다.

getwd()

# jumsu.txt 파일을 읽어서 jumsu이라는 변수에 저장한다.
jumsu <- read.table("R_data/191002_01/jumsu.txt", header=TRUE)
jumsu

# jumsu데이터에서 학번열을 제거한다.
jumsu <- jumsu[-1] 
jumsu

# 각각의 열의 합계를 구한다.  help(sapply)
sapply(jumsu, sum) # sapply(data, function)
# 국어 수학 영어 
#   32   29   34 

# simplify = F이면 lapply와 동일하게 리스트 형태로 결과를 출력한다.
sapply(jumsu, sum, simplify = F)

sapply(jumsu, sum, USE.NAMES = TRUE )
sapply(jumsu, sum, USE.NAMES = FALSE ) 

bardata = sapply(jumsu, sum)
plot(bardata)

# 각각의 열의 평균을 구한다.
sapply(jumsu, mean)
# 국어 수학 영어 
#  6.4  5.8  6.8 

# 참고로 unlist() 함수를 적용해서 lapply()에 적용하면 sapply()와 동일한 결과가 된다.
# lapply() 함수의 반환 타입은 list이다.
# unlist() 함수는 list를 vector으로 변형해주는 함수이다.
unlist(lapply(jumsu, sum))
# 국어 수학 영어 
#   32   29   34 





© 2019. by RaP0d

Powered by aiden