within()
within( )은 with( )와 비슷하지만 데이터를 수정하는 기능을 제공한다는 차이가 있다.
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)