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"
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.