Wie Argumente in R Recycle

Jedes Mal, kombinieren Sie einen Vektor mit mehreren Werten und eines mit einem einzelnen Wert in einer Funktion. R wendet die Funktion, dass die einzelnen Wert für jeden Wert in dem Vektor verwendet wird. Aber das Recycling geht weit über diese Beispiele.

Jedes Mal, wenn Sie geben zwei Vektoren mit ungleichen Längen zu einer Recycling-Funktion, R wiederholt den kürzesten Vektor so oft wie notwendig, um die Aufgabe zu erfüllen Sie sie gebeten, zu erfüllen.

Angenommen, Sie haben die Anzahl der Körbe aufgeteilt Oma gemacht in zwei Zeigern und Drei-Zeiger:

> Granny.pointers lt; - c (10, 2, 4, 0, 4, 1, 4, 2, 7, 2, 1, 2)

Sie ordnen die Zahlen so, dass jedes Spiel für zunächst die Zahl der Zwei-Zeiger angegeben wird, durch die Anzahl der Drei-Zeiger gefolgt.

Jetzt will Oma wissen, wie viele Punkte sie in dieser Saison tatsächlich erzielt wird. Sie können das leicht mit Hilfe von Recycling berechnen:

> Punkte lt; - Granny.pointers * c (2, 3)> Punkte [1] 6 20 8 0 8 3 8 6 14 6 2 6> Summe (Punkte) [1] 87

Nun, was hast du denn hier?

  1. Sie haben einen Vektor mit der Anzahl der Punkte für jeden Korb:

    c (2, 3)
  2. Sie haben gesagt, dass R Vektor um den Vektor zu multiplizierenGranny.pointers.

    R multipliziert, um die erste Zahl in Granny.pointers von 2, die zweite durch 3, die dritte durch 2 wieder, und so weiter.

  3. Sie stellen das Ergebnis in der Variablen Punkte.

  4. Sie summiert alle Zahlen in Punkte die Gesamtzahl der erzielten Punkte zu bekommen.

In der Tat kann man auslassen nur Schritt 3: Die Verschachtelung von Funktionen ermöglicht es Ihnen, diese in einer Zeile Code zu tun:

> Sum (Granny.pointers * c (2, 3))

Recycling kann ein wenig schwierig sein. Wenn die Länge der längeren Vektor nicht genau ein Vielfaches der Länge des kürzeren Vektor ist, können Sie unerwartete Ergebnisse erhalten.

Jetzt will Oma zu wissen, wie viel sie jedes Spiel verbessert. Faulenzen, haben Sie einen schlauen Plan. Mit diff (), Sie berechnen, wie viel mehr oder weniger Körbe Oma gemacht, als sie zuvor im Spiel gemacht. Dann nutzen Sie die vektorisiert Division, diese Unterschiede durch die Anzahl der Körbe im Spiel zu teilen. Um das Ganze abzurunden, können Sie mit 100 und um den ganzen Vektor multiplizieren. Alle diese Berechnungen nehmen eine Zeile Code:

> Runde (diff (baskets.of.Granny) / baskets.of.Granny * 100) 1. 2. 3. 4. 5. 6.-67 25 20 50 -67 -267

Der letzte Wert sieht nicht richtig, weil es unmöglich ist, mehr als 100 Prozent weniger Körbe zu erzielen. R nicht nur Ihnen, dass seltsame result- es warnt Sie auch, dass die Länge diff (baskets.of.Granny) passt nicht die Länge baskets.of.Granny:

Warnmeldung: In diff (baskets.of.Granny) / baskets.of.Granny: längere Objektlänge ist nicht ein Vielfaches von kürzeren Objektlänge

Der Vektor baskets.of.Granny sechs Werte lang, aber das Ergebnis diff (baskets.of.Granny) nur fünf Werte lang ist. So entsprach der Rückgang um 267 Prozent, in der Tat, der letzte Wert von baskets.of.Granny durch den ersten Wert geteilt von diff (baskets.of.Granny). In diesem Beispiel ist der kürzeste Vektor, diff (baskets.of.Granny), wird durch die Teilung Betreiber zurückgeführt.

Das Ergebnis war nicht das, was Sie bestimmt. Um dieses Ergebnis zu vermeiden, sollten Sie nur die ersten fünf Werte verwenden baskets.of.Granny, so dass die Länge der beiden Vektoren entsprechen:

> Runde (diff (baskets.of.Granny) / baskets.of.Granny [1: 5] * 100) 2. 3. 4. 5. 6.-67 25 20 50 -67

Und das alles ist Vektorisierung.

Menü