Ho 2 vettori numerici, uno memorizza i valori per calcolare il massimo da, altre lunghezze di una finestra mobile per calcolare quei massimi su base progressiva. Di seguito è riportato un codice di esempio. Generalmente sto cercando di velocizzare il codice all'interno di system.time. C'è qualche funzione pronta o un modo vettoriale per fare la stessa cosa?Qual è il modo più veloce in R per calcolare rolling max con una dimensione variabile della finestra mobile?
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
}
})
+1 Buona domanda. Questo è un problema interessante da provare e ottimizzare! –