Comment utiliser des boucles avec des indices de r

Utilisation des boucles en R est très pratique, mais vous pouvez écrire du code plus efficace si vous boucle pas sur les valeurs, mais sur les indices. Pour ce faire, vous remplacez la section centrale dans la fonction avec le code suivant:

nclient lt; - la longueur (client) TVA lt; - numérique (nclient) for (i in seq_along (client)) {TVA [i] lt; - commutateur (client [i], privé = 1.12, publique = 1,06, 1))}

Voici quelques différences par rapport à l'aide des valeurs du vecteur de boucle:

  • Vous affectez la longueur du vecteur client à la variable nclient.




  • Ensuite, vous faites un vecteur numérique TVA qui est exactement aussi longtemps que le vecteur client. C'est appelé pré-allocation d'un vecteur.

  • Ensuite, on boucle sur indices de client au lieu de le vecteur lui-même en utilisant la fonction seq_along (). Dans le premier passage dans la boucle, la première valeur de TVA est réglée pour être le résultat de commutateur () appliqué à la première valeur de client. Dans la seconde passe, la seconde valeur de TVA est le résultat de commutateur () appliqué à la seconde valeur en client et ainsi de suite.

Vous pourriez être tenté de remplacer seq_along (client) avec le vecteur 1: nclient, mais ce serait une mauvaise idée. Si le vecteur client sa longueur est de 0, seq_along (client) crée un vecteur vide et le code dans la boucle jamais exécute. Si vous utilisez 1: nclient, R crée un vecteur c (1,0) et la boucle au cours de ces deux valeurs, vous donnant un résultat tout à fait tort.

Chaque fois que vous allonger un objet dans R, R a pour copier la totalité de l'objet et le déplacer vers une nouvelle place dans la mémoire. Cela a deux effets:

  • Tout d'abord, il ralentit votre code, parce que toute la copie prend du temps.

  • Deuxièmement, comme R se déplace continuellement les choses en mémoire, cette mémoire est divisé en un grand nombre de petits espaces.

C'est appelé fragmentation, et il facilite la communication entre R et la mémoire moins lisse. Vous pouvez éviter cette fragmentation par Préallocation mémoire comme dans l'exemple précédent.


» » » » Comment utiliser des boucles avec des indices de r