Comment utiliser des fonctions comme arguments dans r

Dans R, vous pouvez passer une fonction lui-même comme un argument. Vous pouvez facilement attribuer le code complet d'une fonction à un nouvel objet. De même, vous pouvez également attribuer le code de fonction à un argument. Cela ouvre un nouveau monde complet de possibilités. Voici quelques exemples.

Sommaire

Différentes façons de ronde à R

Il existe différentes options pour l'arrondissement des chiffres. La addPercent () Utilisations de fonction rond() pour cela, mais vous pouvez utiliser l'une des autres options - par exemple, sig (). La sig () fonction ne fait pas rond pour un nombre spécifique de decimals- place, il arrondit à un nombre spécifique de chiffres. Vous ne pouvez pas l'utiliser avant d'appeler addPercent (), parce que le rond() fonction dans cette volonté de corps tout gâcher à nouveau.

Bien sûr, vous pourriez écrire une deuxième fonction spécifiquement pour cela, mais il n'y a pas besoin de le faire. Au lieu de cela, vous pouvez simplement adapter addPercent () de telle sorte que vous donnez simplement la fonction que vous souhaitez utiliser comme un argument, comme ceci:

addPercent lt; - la fonction (x, mult = 100, FUN = round, ...) {pour cent lt; - FUN (x * mult, ...) de pâte (pour cent, "%", SEP = "")}

Vous ajoutez un argument à la liste - dans ce cas, AMUSANT - et puis vous pouvez utiliser le nom de cet argument comme une fonction. Aussi, en spécifiant une valeur par défaut fonctionne exactement le même que d'autres arguments- suffit de spécifier la valeur par défaut - dans ce cas, rond - après un = signer.

Si vous souhaitez utiliser sig () maintenant pour arrondir les nombres à trois chiffres, vous pouvez facilement le faire en utilisant l'appel suivant à addPercent ():




> AddPercent (new.numbers, FUN = Signif, chiffres = 3) [1] "82,2%" "2,49%" "162%" "40%"

Qu'est-ce qu'il se passe ici?

  1. Comme précédemment, R prend le vecteur new.numbers et multiplie par 100, parce que cela est la valeur par défaut pour Plus d'informations.

  2. R attribue le code de fonction de sig à AMUSANT, alors maintenant AMUSANT() est une copie parfaite de sig () et fonctionne exactement de la même façon.

  3. R prend l'argument chiffres et transmet à AMUSANT().

Notez l'absence de parenthèses dans l'attribution de l'argument. Si vous avez ajouté les parenthèses là, vous affectez le résultat d'un appel à sig () au lieu de la fonction elle-même. R interpréterait sig (), dans ce cas, comme une fonction imbriquée, et ce ne est pas ce que vous voulez. Plus, R jetterait une erreur car, dans ce cas, vous appelez sig () sans arguments, et R ne aime pas.

Utilisez les fonctions anonymes

Vous pouvez, bien sûr, utiliser toutes les fonctions que vous voulez pour le AMUSANT argument. Cette fonction n'a même pas besoin d'avoir un nom, parce que vous copiez le code efficacement. Donc, au lieu de donner un nom de fonction, vous pouvez simplement ajouter le code comme un argument comme un anonyme fonction. Une fonction anonyme est une fonction sans nom.

Supposons que vous ayez les bénéfices trimestriels de votre entreprise dans un vecteur comme ceci:

> Bénéfices lt; - c (2100, 1430, 3580, 5230)

Votre patron vous demande de signaler combien de bénéfice a été faite dans chaque trimestre par rapport au total pour l'année, et, bien sûr, vous voulez utiliser votre nouveau addPercent () fonction. Pour calculer les bénéfices relatifs de pour cent, vous pourriez écrire un rel.profit () fonctionner comme ceci:

> Rel.profit lt; - la fonction (x) round (x / sum (x) * 100)

Mais vous ne devez pas. Au lieu de cela, vous pouvez simplement utiliser le corps de la fonction elle-même comme un argument, comme dans l'exemple suivant:

> AddPercent (profits, FUN = function (x) round (x / sum (x) * 100)) [1] "17%" "12%" "29%" "42%"

Bien sûr, ce ne sont pas la meilleure façon de faire cette tâche spécifique. Vous pourriez facilement avoir obtenu le même résultat avec le code suivant:

> AddPercent (bénéfices / somme (bénéfices)) [1] "17%" "12%" "29%" "42%"

» » » » Comment utiliser des fonctions comme arguments dans r