더북(TheBook)

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