Vídeo: Cómo usar while loops y for loops en R, Parte 12: Curso Introducción a R con RStudio 2024
O uso de loops em R é muito útil, mas você pode escrever código mais eficiente se você não encurralar valores, mas sobre os índices. Para isso, você substitui a seção do meio na função com o seguinte código:
nclient <- comprimento (cliente) IVA <- numérico (ncliente) para (i em seq_along (cliente)) {VAT [i] <- switch (cliente [i], private = 1. 12, public = 1. 06, 1))}
Aqui estão algumas diferenças de usar valores do vetor para looping:
-
Você atribui o comprimento do cliente vetorial ao ncliente variável.
-
Então você faz um vetor de IVA numérico exatamente como o cliente vetorial. Isso é chamado pré-atribuição de um vetor.
-
Em seguida, você encaminha os índices do cliente em vez do próprio vetor usando a função seq_along (). Na primeira passagem pelo loop, o primeiro valor no IVA é definido como o resultado do switch () aplicado ao primeiro valor no cliente. Na segunda passagem, o segundo valor do IVA é o resultado de switch () aplicado ao segundo valor no cliente e assim por diante.
Você pode ser tentado a substituir seq_along (cliente) pelo vetor 1: ncliente, mas isso seria uma má idéia. Se o cliente vetorial tiver um comprimento de 0, seq_along (cliente) cria um vetor vazio e o código no loop nunca é executado. Se você usa 1: nclient, R cria um vetor c (1, 0) e faz um loop sobre esses dois valores, dando-lhe um resultado completamente errado.
Cada vez que você alonga 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, retarda o seu código, porque toda a cópia leva tempo.
-
Em segundo lugar, como R move continuamente as coisas na memória, esta memória é dividida em muitos espaços pequenos.
Isso é chamado de fragmentação, e torna a comunicação entre R e a memória menos suaves. Você pode evitar essa fragmentação por pré-alocando a memória como no exemplo anterior.