Mam 2 wektory numeryczne, jeden przechowuje wartości, aby obliczyć maksimum, kolejne długości okna przewijania, aby obliczyć te maksima w sposób ciągły. Poniżej znajduje się przykładowy kod. Ogólnie próbuję przyspieszyć kod wewnątrz system.time. Czy jest jakaś gotowa funkcja lub wektoryzowany sposób na zrobienie tego samego?Jaka jest najszybsza droga w R do obliczenia toczenia maksymalnego przy zmiennym rozmiarze okna toczenia?
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 Dobre pytanie. To jest interesujący problem, aby spróbować i zoptymalizować! –