더북(TheBook)

sapply()

sapply( )는 lapply( )와 유사하지만 리스트 대신 행렬, 벡터 등의 데이터 타입으로 결과를 반환하는 특징이 있는 함수다.

표 4-11 sapply( ) 함수

sapply : 벡터, 리스트, 표현식, 데이터 프레임 등에 함수를 적용하고 그 결과를 벡터 또는 행렬로 반환한다.

sapply(
  X,    # 벡터, 리스트, 표현식 또는 데이터 프레임
  FUN,  # 적용할 함수
  ...,  # 추가 인자. 이 인자들은 FUN에 전달된다.
)

반환 값은 FUN의 결과가 길이 1인 벡터들이면 벡터, 길이가 1보다 큰 벡터들이면 행렬이다.

예를 들어, 아이리스의 컬럼별로 평균을 구하는 경우를 살펴보자. 다음 코드에서 볼 수 있듯이 lapply( )는 결과를 리스트로 반환하지만, sapply( )는 벡터를 반환한다.

> lapply(iris[, 1:4], mean)
$Sepal.Length
[1] 5.843333

$Sepal.Width
[1] 3.057333

$Petal.Length
[1] 3.758

$Petal.Width
[1] 1.199333
> sapply(iris[, 1:4], mean)
Sepal.Length  Sepal.Width  Petal.Length  Petal.Width
    5.843333     3.057333      3.758000     1.199333
> class(sapply(iris[, 1:4], mean))  # "numeric"은 숫자를 저장한 벡터를 의미함
[1] "numeric"

sapply( )에서 반환한 벡터는 as.data.frame( )을 사용해 데이터 프레임으로 변환할 수 있다. 이때 t(x)를 사용해 벡터의 행과 열을 바꿔주지 않으면 기대한 것과 다른 모양의 데이터 프레임을 얻게 된다. 다음은 아이리스의 컬럼별 평균을 sapply( )를 사용해 벡터로 구한 뒤 이를 다시 데이터 프레임으로 변환하는 예다.

> x <- sapply(iris[, 1:4], mean)
> as.data.frame(x)
                    x
Sepal.Length 5.843333
Sepal.Width  3.057333
Petal.Length 3.758000
Petal.Width  1.199333
> as.data.frame(t(x))
  Sepal.Length  Sepal.Width  Petal.Length  Petal.Width
1     5.843333     3.057333       3.758       1.199333

다수의 컬럼을 포함하는 데이터 프레임을 처리하다 보면 종종 각 컬럼의 데이터 타입을 알아내고 싶을 때가 있다. 예를 들면, 어떤 컬럼에 숫자가 저장되어 있는지를 판단하는 경우다. 이때 sapply( )를 유용하게 사용할 수 있다. 다음은 아이리스 데이터에서 각 컬럼의 데이터 타입을 구하는 예다.

> sapply(iris, class)
Sepal.Length  Sepal.Width  Petal.Length  Petal.Width   Species
   "numeric"    "numeric"     "numeric"    "numeric"   "factor"
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.