1. 학습
  2. /
  3. 강의
  4. /
  5. Rcpp로 R 코드 최적화하기

Connected

연습 문제

이전 관측값 유지(Last observation carried forward)

시계열에 결측치가 있을 때, 흔히 쓰는 기법 중 하나는 마지막으로 관측된(결측이 아닌) 값을 앞으로 끌어와 채우는 것입니다. 이를 last observation carried forward라고 합니다. 이 방법은 반복문 형태로 자연스럽게 표현할 수 있습니다. 아래는 R로 구현한 예시예요:

na_locf1 <- function(x) {
  current <- NA  
  res <- x
  for(i in seq_along(x)) {
    if(is.na(x[i])) {
      # Replace with current
      res[i] <- current
    } else {
      # Set current 
      current <- x[i]
    }
  }  
  res
}

롤링 평균과 마찬가지로, 이 코드를 가독성을 유지하면서 벡터화하기는 매우 어렵습니다. 하지만 단순한 for 루프이므로 C++로 쉽게 옮길 수 있어요.

na_locf1()가 작업 공간에 제공되어 있습니다. 이를 C++로 변환해 na_locf2()에 할당하세요.

지침

100 XP
  • current를 NumericVector의 NA 값으로 초기화하세요.
  • if 조건에서는 x의 i번째 요소가 NumericVector의 NA인지 확인해야 합니다.
  • 조건이 참이면 res의 i번째 요소를 current로 설정하세요.
  • 그렇지 않으면 current를 x의 i번째 요소로 설정하세요.