Comment recycler arguments en r

Chaque fois, vous combinez un vecteur de valeurs multiples et une avec une seule valeur dans une fonction. R applique la fonction, en utilisant cette valeur unique pour chaque valeur dans le vecteur. Mais le recyclage va au-delà de ces exemples.

Chaque fois que vous donnez deux vecteurs avec des longueurs inégales à une fonction de recyclage, R répète le vecteur le plus court aussi souvent que nécessaire pour mener à bien la tâche que vous avez demandé à effectuer.

Supposons que vous divisez le nombre de paniers Granny faite en deux-points et trois points:

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

Vous organisez les numéros d'une manière telle que, pour chaque match, d'abord le nombre de deux-points est donné, suivi par le nombre de trois points.

Maintenant Granny veut savoir combien de points elle a effectivement marqué cette saison. Vous pouvez calculer que facilement avec l'aide du recyclage:

> Points lt; - Granny.pointers * C (2, 3)> des points [1] 20 6 8 0 8 3 6 8 14 6 2 6> somme (points de) [1] 87

Maintenant, qu'est-ce que vous faites ici?




  1. Vous avez fait un vecteur avec le nombre de points pour chaque panier:

    c (2, 3)
  2. Vous avez dit à R de multiplier ce vecteur par le vecteur Granny.pointers.

    R multiplié le premier nombre Granny.pointers par 2, par 3 la deuxième, la troisième en deux fois, et ainsi de suite.

  3. Vous mettez le résultat dans la variable points.

  4. Vous résumé la situation tous les numéros points pour obtenir le nombre total de points marqués.

En fait, vous pouvez simplement laisser l'étape 3. L'imbrication des fonctions vous permet de faire cela en une seule ligne de code:

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

Le recyclage peut être un peu difficile. Si la longueur du vecteur est plus pas exactement un multiple de la longueur du vecteur plus court, on peut obtenir des résultats inattendus.

Maintenant Granny veut savoir combien elle améliorée à chaque match. Être paresseux, vous avez un plan astucieux. Avec diff (), vous calculez combien plus ou moins de paniers Granny fait qu'elle a fait dans le jeu avant. Ensuite, vous utilisez la division vectorisée de diviser ces différences par le nombre de paniers dans le jeu. Pour couronner le tout, vous multipliez par 100 et tout autour du vecteur. Tous ces calculs prennent une ligne de code:

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

Cette dernière valeur ne semble pas juste, parce qu'il est impossible de marquer plus de 100 pour cent moins de paniers. R ne vous donne pas simplement que result- bizarre, il vous avertit également que la longueur de diff (baskets.of.Granny) ne correspond pas à la longueur de baskets.of.Granny:

Message d'avertissement: Dans diff (baskets.of.Granny) / baskets.of.Granny: plus la longueur de l'objet est pas un multiple de plus courte longueur d'objet

Le vecteur baskets.of.Granny est six valeurs de long, mais le résultat de diff (baskets.of.Granny) est à seulement cinq valeurs de long. Ainsi, la diminution de 267 pour cent est en fait, la dernière valeur de baskets.of.Granny divisée par la première valeur de diff (baskets.of.Granny). Dans cet exemple, le vecteur le plus court, diff (baskets.of.Granny), est recyclé par l'opérateur de division.

Ce résultat n'a pas été ce que vous vouliez. Pour éviter ce résultat, vous devez utiliser seulement les cinq premières valeurs de baskets.of.Granny, de sorte que la longueur des deux vecteurs correspondent à:

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

Et tout ce qui est vectorisation.


» » » » Comment recycler arguments en r