R - substituição condicional vectorizada

Oi eu estou tentando manipular uma lista de números e eu gostaria de fazê-lo sem um loop for, usando a operação nativa rápida em R. O pseudocódigo para a manipulação é:

Por padrão, o total inicial é 100 (para cada bloco dentro de zeros)

Do primeiro zero ao próximo zero, o momento em que o total acumulado cai em mais de 2%, substitui todos os números subseqüentes por zero.

Faça isso longe todos os blocos de números dentro de zeros

As somas cumulativas são redefinidas para 100 todas as vezes

Por exemplo, se seguirem os meus dados:

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);

Os resultados seriam:

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

Atualmente eu tenho uma implementação com um loop for, mas desde que meu vetor é realmente longo, o desempenho é terrível.

Desde já, obrigado.

Aqui está um código de amostra em execução:

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)

questionAnswers(1)

yourAnswerToTheQuestion