는 R 함수위한 여분 (다중 열 XTS 함께 사용될 때 매우 느린)
XTS ::: na.locf.xts
매우 느리다 몇 개 컬럼 이상의 여러 컬럼 xts. 실제로이 루프는 na.locf.xts 코드에 있습니다.
이 루프를 피하는 방법을 찾으려고합니다.
아이디어가 있으십니까?
는 R 함수위한 여분 (다중 열 XTS 함께 사용될 때 매우 느린)
XTS ::: na.locf.xts
매우 느리다 몇 개 컬럼 이상의 여러 컬럼 xts. 실제로이 루프는 na.locf.xts 코드에 있습니다.
이 루프를 피하는 방법을 찾으려고합니다.
아이디어가 있으십니까?
na.locf.xts
의 루프는 개체의 각 열에 대해 전체 개체의 복사본을 만들기 때문에 속도가 느립니다. 루프 자체는 느리지 않습니다. [.xts
에 의해 생성 된 복사본은 느립니다.
R-Forge에 실험용 (따라서 알아볼 수없는) 버전 na.locf.xts
이 있습니다.이 버전을 사용하면 열을 C로 이동하여 개체를 복사하지 않아도됩니다. 아주 큰 객체의 경우에는 조금 더 빠릅니다.
set.seed(21)
m <- replicate(20, rnorm(1e6))
is.na(m) <- sample(length(x), 1e5)
x <- xts(m, Sys.time()-1e6:1)
y <- x[1:1e5,1:3]
> # smaller objects
> system.time(a <- na.locf(y))
user system elapsed
0.008 0.000 0.008
> system.time(b <- xts:::.na.locf.xts(y))
user system elapsed
0.000 0.000 0.003
> identical(a,b)
[1] TRUE
> # larger objects
> system.time(a <- na.locf(x))
user system elapsed
1.620 1.420 3.064
> system.time(b <- xts:::.na.locf.xts(x))
user system elapsed
0.124 0.092 0.220
> identical(a,b)
[1] TRUE
참고로 실험용 버전의 na.locf.xts 링크입니다. https://r-forge.r-project.org/scm/viewvc.php/pkg/xts/R/na.R?view= 마크 업 및 수정 = 793 & root = xts – RockScience
timeIndex <- index(x)
x <- apply(x, 2, na.locf)
x <- as.xts(x, order.by = timeIndex)
이 는 컬럼 별 데이터 복사를 방지한다. 이없이 n 번째 열을 채울 때 1 : (n-1) 열의 복사본을 만들고 n 번째 열을 추가하면 n이 클 때 매우 느리게됩니다.
왜 루프가 없습니까? 당신은 for-loops가 느린 (실수로) 많은 사람들 중 하나입니까? –