R - reemplazo condicional vectorizado

Hola, estoy tratando de manipular una lista de números y me gustaría hacerlo sin un bucle for, usando una operación nativa rápida en R. El pseudocódigo para la manipulación es:

Por defecto, el total inicial es 100 (para cada bloque dentro de ceros)

Desde el primer cero al siguiente cero, en el momento en que el total acumulado cae en más del 2%, reemplace todos los números subsiguientes con cero.

Haz esto lejos todos los bloques de números dentro de ceros

Las sumas acumuladas se restablecen a 100 cada vez.

Por ejemplo si lo siguiente eran mis datos:

d <- c(0,0,0,1,3,4,5,-1,2,3,-5,8,0,0,-2,-3,3,5,0,0,0,-1,-1,-1,-1);

Los resultados serían:

0 0 0 1 3 4 5 -1 2 3 -5 0 0 0 -2 -3 0 0 0 0 0 -1 -1 -1 0

Actualmente tengo una implementación con un bucle for, pero como mi vector es realmente largo, el rendimiento es terrible.

Gracias por adelantado.

Aquí hay un código de ejemplo en ejecución:

d <- c(0,0,0,1,3,4,5,-1,2,3,-5,8,0,0,-2,-3,3,5,0,0,0,-1,-1,-1,-1);
ans <- d;
running_total <- 100;
count <- 1;
max <- 100;
toggle <- FALSE;
processing <- FALSE;

for(i in d){
  if( i != 0 ){  
       processing <- TRUE; 
       if(toggle == TRUE){
          ans[count] = 0;  
       }
       else{
         running_total = running_total + i;

          if( running_total > max ){ max = running_total;}
          else if ( 0.98*max > running_total){
              toggle <- TRUE;  
          }
      }
   }

   if( i == 0 && processing == TRUE )
   { 
       running_total = 100; 
       max = 100;
       toggle <- FALSE;
   }
   count <- count + 1;
}
cat(ans)

Respuestas a la pregunta(1)

Su respuesta a la pregunta