within()

    within( )은 with( )와 비슷하지만 데이터를 수정하는 기능을 제공한다는 차이가 있다.

    표 4-28 within( ) 함수

    within : 데이터 환경에서 주어진 표현식을 평가한다.

    within(
      data, # 환경(environment)을 만들 데이터
      expr, # 평가할 표현식. expr의 예에는 코드 블록 { ... }을 들 수 있다.
      ...   # 이후 함수들에 전달될 인자
    )

    반환 값은 expr의 평가에 따라 수정된 데이터다.

    다음은 벡터에서 몇 개 데이터가 결측치일 때 이를 중앙값으로 치환하는 예다.

    > (x <- data.frame(val=c(1, 2, 3, 4, NA, 5, NA)))
     val
    1  1
    2  2
    3  3
    4  4
    5  NA
    6  5
    7  NA
    > x <- within(x, {
    +   val <- ifelse(is.na(val), median(val, na.rm=TRUE), val)
    + })
    > x
     val
    1  1
    2  2
    3  3
    4  4
    5  3
    6  5
    7  3
    

    위 코드에서 median( ) 함수 호출 시에 na.rm=TRUE를 지정했다. 이는 NA 값이 포함된 채로 median( )을 호출하면 결과로 NA가 나오기 때문이다.

    참고로 위에서 보인 within( ) 호출 코드는 다음과 같이 표현할 수도 있다.

    > x$val[is.na(x$val)] <- median(x$val, na.rm=TRUE)
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.