Video: WW1 - Oversimplified (Part 1) 2025
Brug af løkker i R er meget praktisk, men du kan skrive mere effektiv kode, hvis du ikke løber over værdier men over indekserne. For at gøre det erstatter du den midterste sektion i funktionen med følgende kode:
nclient <- længde (klient) moms <- numerisk (nclient) til (jeg i seq_along (klient)) {moms [i] <- switch (klient [i], privat = 1, 12, offentlig = 1, 06, 1))}
Her er nogle få forskelle fra at bruge værdier af vektoren til looping:
-
Du tildeler længden af vektorklienten til variablen nclient.
-
Så laver du en numerisk vektor moms, der er lige så lang som vektorklienten. Dette kaldes fordeling af en vektor.
-
Så løber du over indekser af klient i stedet for selve vektoren ved at bruge funktionen seq_along (). I den første passage gennem løkken er den første værdi i moms sat til at være resultatet af switch () anvendt til den første værdi i klienten. I andet pass er den anden værdi af moms resultatet af switch () anvendt til den anden værdi i klient og så videre.
Du kan blive fristet til at erstatte seq_along (klient) med vektoren 1: nclient, men det ville være en dårlig idé. Hvis vektorklienten har en længde på 0, opretter seq_along (klient) en tom vektor, og koden i sløjfen udføres aldrig. Hvis du bruger 1: nclient, skaber R en vektor c (1, 0) og sløjfer over disse to værdier, hvilket giver dig et helt forkert resultat.
Hver gang du forlænger et objekt i R, skal R kopiere hele objektet og flytte det til et nyt sted i hukommelsen. Dette har to effekter:
-
Først sænker den din kode, fordi al kopiering tager tid.
-
For det andet, da R kontinuerligt bevæger tingene rundt i hukommelsen, bliver denne hukommelse opdelt i mange små rum.
Dette kaldes fragmentering, , og det gør kommunikationen mellem R og hukommelsen mindre glat. Du kan undgå denne fragmentering ved forud tildeling -hukommelse som i det foregående eksempel.