Cómo utilizar bucles con índices en r

El uso de bucles en I es muy útil, pero se puede escribir código más eficiente si bucle no sobre los valores, pero en los índices. Para ello, se reemplaza la sección central de la función con el siguiente código:

nclient lt; - Longitud (cliente) IVA lt; - numérico (nclient) para (i en seq_along (cliente)) {IVA [i] lt; - Interruptor (cliente [i], privado = 1,12, pública = 1,06, 1))}

Aquí hay algunas diferencias con el uso de valores del vector de bucle:

  • Se asigna la longitud del vector cliente a la variable nclient.

  • Luego de hacer un vector numérico IVA eso es exactamente siempre y cuando el vector cliente. Se llama preasignación de un vector.

  • Entonces bucle sobre índices de cliente en lugar del propio vector mediante el uso de la función seq_along (). En la primera pasada a través del bucle, el primer valor de IVA está dispuesto a ser el resultado de switch () aplicada al primer valor de cliente. En el segundo paso, el segundo valor de IVA es el resultado de switch () aplicada al segundo valor en cliente etcétera.

Usted puede tener la tentación de sustituir seq_along (cliente) con el vector 1: nclient, pero eso sería una mala idea. Si el vector cliente tiene una longitud de 0, seq_along (cliente) crea un vector vacío y el código en el bucle nunca se ejecuta. Si utiliza 1: nclient, R crea un vector c (1,0) y bucle sobre esos dos valores, que le da un resultado completamente equivocado.

Cada vez que alargar un objeto en R, R tiene que copiar todo el objeto y moverlo a un nuevo lugar en la memoria. Esto tiene dos efectos:

  • En primer lugar, se ralentiza su código, porque toda la copia requiere tiempo.

  • En segundo lugar, como R se mueve continuamente las cosas en la memoria, esta memoria se divide en una gran cantidad de espacios pequeños.

Se llama la fragmentación, y hace que la comunicación entre R y la memoria menos suave. Usted puede evitar esta fragmentación por pre-reparten la memoria como en el ejemplo anterior.




» » » » Cómo utilizar bucles con índices en r