6. Apply() 함수
in Study on R Programming
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