私は2つの数値ベクトルを持っています。1つは最大値を計算するための値を格納し、もう1つはローリングウィンドウの長さでローリングベースでそれらの最大値を計算します。以下はサンプルコードです。通常、system.time 内のコードを高速化しようとしています。同じことを行うための準備が整った関数またはベクトル化された方法はありますか?
a <- rep(1:5,20000)
set.seed(123)
b <- rep(sample(1:50),2000)
system.time({
out <- vector(mode='numeric', length=NROW(a))
for(i in seq(a)) {
if (i-b[i]>=0) out[i] <- max(a[(i-b[i]+1):i])
else out[i] <- NA
}
})