Ich habe 2 numerische Vektoren, einer speichert Werte zur Berechnung des Maximums ab, andere Längen eines rollenden Fensters, um diese Maxima rollierend zu berechnen. Unten finden Sie einen Beispielcode. Generell versuche ich den Code in system.time zu beschleunigen. Gibt es eine fertige Funktion oder einen vektorisierten Weg, um dasselbe zu tun?Was ist der schnellste Weg in R, um Rolling Max mit einer variablen Rolling Window-Größe zu berechnen?
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 Gute Frage. Dies ist ein interessantes Problem zu versuchen und zu optimieren! –