Como usar Loops com Índices em R

O uso de loops em R é muito útil, mas você pode escrever código mais eficiente se você loop não sobre os valores, mas ao longo dos índices. Para fazer isso, você substitui a parte do meio na função com o seguinte código:

nclient lt; - comprimento (cliente) IVA lt; - numérico (nclient) para (i no seq_along (cliente)) {IVA [i] lt; - switch (cliente [i], privado = 1,12, public = 1,06, 1))}

Aqui estão algumas diferenças de usar valores do vector de looping:

  • É possível atribuir o comprimento do vector cliente para a variável nclient.

  • Então você faz um vetor numérico CUBA que é exactamente tão longo como o vetor cliente. Isto é chamado pré-afectação de um vector.

  • Então você loop sobre índices de cliente em vez de o próprio vector usando a função seq_along (). Na primeira execução do ciclo, o primeiro valor CUBA é ajustado para ser o resultado de interruptor() aplicada ao primeiro valor cliente. Na segunda passagem, o segundo valor de CUBA é o resultado de interruptor() aplicada ao segundo valor cliente e assim por diante.

Você pode ser tentado para substituir seq_along (cliente) com o vector 1: nclient, mas isso seria uma má idéia. Se o vector cliente tem um comprimento de 0, seq_along (cliente) cria um vector vazio e o código no loop nunca é executado. Se você usar 1: nclient, R cria um vetor c (1,0) e loop sobre esses dois valores, dando-lhe um resultado completamente errado.

Toda vez que você alongar um objeto em R, R tem que copiar todo o objeto e movê-lo para um novo local na memória. Isso tem dois efeitos:

  • Primeiro, ele retarda o seu código, porque toda a cópia leva tempo.

  • Em segundo lugar, como R move-se continuamente as coisas na memória, esta memória é dividida em uma série de pequenos espaços.

Isto é chamado fragmentação, e faz a comunicação entre R ea memória menos suave. Você pode evitar essa fragmentação pré-reparte memória como no exemplo anterior.

menu