더북(TheBook)

지금까지 설명한 sapply( )의 사용 예에서 FUN은 1개 값을 반환했다. 예를 들어, mean 함수의 반환 값은 1개 값이다. 이 경우 sapply( )의 결과는 이들 값을 모은 벡터가 된다. 하지만 sapply( )에 인자로 주어진 함수의 출력이 길이가 1보다 큰 벡터들이라면 sapply( )는 행렬을 반환한다. 다음 예에서는 아이리스의 숫자형 값들에 대해 각 값이 3보다 큰지 여부를 판단한다. sapply( )에 넘긴 FUN의 반환 값이 길이가 1보다 큰 벡터기 때문에 sapply( )의 수행 결과는 행렬이다.

> y <- sapply(iris[, 1:4], function(x) { x > 3 })
> class(y)
[1] "matrix"
> head(y)
     Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,]         TRUE        TRUE        FALSE       FALSE
[2,]         TRUE        FALSE       FALSE       FALSE
[3,]         TRUE        TRUE        FALSE       FALSE
[4,]         TRUE        TRUE        FALSE       FALSE
[5,]         TRUE        TRUE        FALSE       FALSE
[6,]         TRUE        TRUE        FALSE       FALSE
...

sapply( )는 한 가지 타입만 저장 가능한 데이터 타입인 벡터 또는 행렬을 반환하므로 sapply( )에 인자로 준 함수 FUN의 반환 값에 여러 가지 데이터 타입이 섞여 있으면 안 된다. 만약 각 컬럼에 대해 수행한 함수의 결과 데이터 타입이 서로 다르다면, 리스트를 반환하는 lapply( )나 리스트 또는 데이터 프레임을 반환할 수 있는 plyr 패키지(5장에서 설명)를 사용해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.