Wie Verwenden von Loops mit Indizes in R

Mit Schleifen in R ist sehr praktisch, aber Sie können effizienter Code schreiben, wenn Sie Schleife nicht über die Werte, sondern über den Indizes. Um dies zu tun, ersetzen Sie den mittleren Abschnitt in der Funktion mit dem folgenden Code:

nclient lt; - Länge (Client) Mehrwertsteuer lt; - numerisch (nclient) für (i in seq_along (Client)) {MwSt [i] lt; - Schalter (Client [i], privat = 1,12, public = 1,06, 1))}

Hier sind einige Unterschiede von Werten des Vektors zur Umschlingung unter Verwendung:

  • Sie weisen die Länge des Vektors Klient auf die Variable nclient.

  • Dann machen Sie einen numerischen Vektor Mehrwertsteuer das ist genau so lang wie der Vektor Klient. Das nennt man Vorbelegung eines Vektors.

  • Dann sind Sie Schleife über Indizes der Client anstelle des Vektors selbst mit der Funktion seq_along (). In dem ersten Durchlauf durch die Schleife, wobei der erste Wert in Mehrwertsteuer wird das Ergebnis sein, Schalter() auf den ersten Wert in angewendet Klient. In dem zweiten Durchlauf, wobei der zweite Wert von Mehrwertsteuer ist das Ergebnis Schalter() auf den zweiten Wert in angewendet Klient und so weiter.

Sie können zu ersetzen versucht sein, seq_along (Client) mit dem Vektor 1: nclient, aber das wäre eine schlechte Idee. Wenn der Vektor Klient hat eine Länge von 0, seq_along (Client) einen leeren Vektor erzeugt und den Code in der Schleife nie ausgeführt. Wenn du benutzt 1: nclient, R erzeugt einen Vektor c (1,0) und eine Schleife über diese beiden Werte zusammen, so dass Sie ein völlig falsches Ergebnis.

Jedes Mal, wenn Sie ein Objekt in R verlängern, hat R das gesamte Objekt und verschieben Sie sie an einen neuen Ort im Speicher zu kopieren. Dies hat zwei Wirkungen:

  • Erstens, es verlangsamt Ihren Code, weil alle die Kopierzeit dauert.

  • Zweitens, wie R kontinuierlich Dinge um im Speicher bewegt, wird dieser Speicher in viele kleine Räume aufgeteilt.

Das nennt man Zersplitterung, und es macht die Kommunikation zwischen R und dem Speicher weniger glatt. Sie können diese Fragmentierung zu vermeiden, indem Vorbelegen Speicher, wie im vorherigen Beispiel.

Menü