apply- apply(input: array, output: array)
- sapply(input: list or vector, output: vector or array)
- by
- eapply
- lapply(input: list or vector, output: list)
- rapply
- tapply(input: list or vector and factor, output: vector or array)
apply특정 matrix or array에 함수를 적용한 뒤,
계산 결과를 방향에 따라 출력
sum과 같이 여러 데이터를 사용하는 함수의 경우,
지정한 방향으로 연산
apply(array, 방향, 함수)
x<-matrix(1:9, c(3, 3))
apply(x, 1, function(x){2*x})
[,1] [,2] [,3]
[1,] 2 4 6
[2,] 8 10 12
[3,] 14 16 18
lapplyapply는 input으로 array만 사용 가능하다.(vector 사용 불가능)
lapply를 사용하면, vector와 list에 함수 적용 가능(데이터 프레임도 list기반 s3객체이기 때문에 적용 가능)
mean과 같은 여러 데이터를 사용하는 경우, 열단위로 계산
2*x와 같이 function을 생성해서 사용하면, 각 요소별로 계산
result<-lapply(1:3, function(x){x*2})
result
[[1]]
[1] 2
[[2]]
[1] 4
[[3]]
[1] 6
sapplysapply는 list대신 matrix or vector로 반환한다.
lapply는 list로 반환하기 때문에 unlist 과정을 거쳐야 하지만,
sapply의 결과를 바로 이용할 수 있다.
(내부적으로 lapply의 래퍼 함수임)
y<-sapply(iris[, 1:4], function(x){x>3})
z<-sapply(iris[, 1:4], mean)
vapplyoutput format을 정확하게 정의할 수 있다.
y<-vapply(iris[, 1:4], function(x){x>3}, numeric(length(iris[, 1])))
tapply그룹별 연산 처리를 할 수 있다.
그룹을 인자로 주고(factor), 원소별 처리가 아닌 그룹별 처리 실시
(그룹인자는 내부적으로 factor형으로 캐스팅해서 사용함)
tapply(1:10, rep(c(1, 2), each=5), sum)
tapply(iris$Sepal.Length, iris$Species, mean)
mapplysapply와 유사하지만, 여러개의 인자를 사용하는 함수를 적용할 수 있다.)
함수의 인자의 개수만큼, 벡터나 리스트를 입력해 주어야 함
mapply(함수, 첫번째 변수, 두번째 변수)
mapply(function(i, s){
sprintf(" %d%s ", i, s)}, 1:3, c("a", "b", "c"))
mapply('+', iris$Sepal.Length, iris$Sepal.Width)