Hoe functies gebruiken als argumenten in R

In R, kunt u een functie zichzelf als een argument. U kunt de volledige code van een functie gemakkelijk toe te wijzen aan een nieuw object. Op dezelfde manier kunt u ook de functie toe te kennen aan een argument. Dit opent een compleet nieuwe wereld van mogelijkheden. Hier zijn een paar voorbeelden.

Verschillende manieren om te ronden in R

Er zijn verschillende opties voor getallen afronden. De addPercent () functie gebruikt round () voor, maar wilt u misschien een van de andere opties te gebruiken - bijvoorbeeld signif (). De signif () functie doet niet rond om een ​​specifiek aantal decimalen; in plaats daarvan, het is afgerond op een specifiek aantal cijfers. Je kunt het niet gebruiken voordat je addPercent () noemen, omdat de ronde () functie in dat lichaam zal puinhoop alles weer op.

Natuurlijk kan je een tweede functie specifiek te schrijven voor dat, maar er is geen noodzaak om dat te doen. In plaats daarvan kun je gewoon addPercent () aan te passen op zo'n manier dat je gewoon de functie die u wilt gebruiken als argument, zoals deze geven:

addPercent <- functie (x, mult = 100, FUN = ronde, ...) {
procent <- FUN (x * mult, ...)
pasta (procent, "%", september = "")
}

U voegt een argument aan de lijst - in dit geval, FUN - en dan kun je de naam van dat argument als functie te gebruiken. Ook het opgeven van een standaardwaarde werkt precies hetzelfde als met andere argumenten; specificeert de standaard waarde - in dit geval, ronde - na een = teken.

Als u wilt signif (nu gebruik) voor het afronden van de nummers drie cijfers, kunt u eenvoudig doen dat met behulp van de volgende oproep tot addPercent ():

> AddPercent (new.numbers, FUN = signif, cijfers = 3)
[1] "82,2%" "2.49%" "162%" "40%"

Wat gebeurt er hier?

  1. Zoals eerder, R neemt de vector new.numbers en vermenigvuldigt deze met 100, want dat is de standaardwaarde voor mult.
  2. R wijst de functie code van signif naar FUN, dus nu FUN () is een perfecte kopie van signif () en werkt op precies dezelfde manier.
  3. R neemt het argument cijfers en doorgeeft aan FUN ().

Let op de afwezigheid van haakjes in het argument opdracht. Als u de haakjes er toegevoegd, zou u het resultaat van een oproep toewijzen aan signif () in plaats van de functie zelf. R zou signif () interpreteren, in dat geval, als een geneste functie, en dat is niet wat je wilt. Plus, zou R een fout te gooien, omdat in dat geval signif () zonder argumenten bellen u, en R houdt niet van dat.

Gebruik anonieme functies

U kunt natuurlijk gebruik maken van elke functie die u wilt gebruiken voor de FUN argument. Die functie is niet eens nodig om een ​​naam te hebben, omdat je effectief kopieer de code. Dus, in plaats van het geven van een functie naam, kun je gewoon de code toe te voegen als een argument als een anonieme functie. Een anonieme functie is een functie zonder naam.

Stel, je hebt de driemaandelijkse winst van uw bedrijf in een vector als volgt uit:

> Winsten <- c (2100, 1430, 3580, 5230)

Je baas vraagt ​​je om te rapporteren hoeveel winst werd gemaakt in elk kwartaal ten opzichte van het totaal voor het jaar, en, natuurlijk, u wilt uw nieuwe addPercent () functie gebruiken. Om de relatieve winst in procenten berekenen, kon je een rel.profit () functie als dit schrijven:

> Rel.profit <- functie (x) rond (x / som (x) * 100)

Maar je hoeft niet. In plaats daarvan kunt u gewoon gebruik maken van de functie lichaam zelf als argument, zoals in het volgende voorbeeld:

> AddPercent (winst,
FUN = function (x) rond (x / som (x) * 100))
[1] "17%" "12%" "29%" "42%"

Uiteraard is dit niet de optimale manier van deze specifieke taak. Je kan gemakkelijk hetzelfde resultaat met de volgende code hebben gekregen:

> AddPercent (winst / som (winst))
[1] "17%" "12%" "29%" "42%"