Hoe te gebruiken als ... Else Verklaringen in R

Bij het gebruik van R, soms moet je je functie nodig hebt om iets te doen als een voorwaarde waar is en iets anders als het niet. Je kan dit doen met twee als statements, maar er is een eenvoudiger manier in R: een if ... else statement. Een if ... else-statement bevat dezelfde elementen als een if-statement (zie de vorige paragraaf), en dan nog wat extra:

  • Het sleutelwoord anders, geplaatst na de eerste codeblok
  • Een tweede codeblok vervat tussen accolades, die moet worden uitgevoerd als en alleen als het resultaat van de toestand in de if () statement ONWAAR

In sommige landen is het bedrag van de belasting (BTW) die betaald moet worden, hangt af van de vraag of de cliënt een publieke of private organisatie toegevoegd. Stel je voor dat publieke organisaties moeten slechts 6 procent BTW betalen en private organisaties hebben tot 12 procent BTW te betalen. U kunt een extra argument publiek toe te voegen aan de Prijscalculator () functie en neemt hij het als volgt om de juiste hoeveelheid toe te voegen van de BTW:

if (uur> 100) net.price <- net.price * 0.9
als (openbare) {
tot.price <- net.price * 1,06
} Else {
tot.price <- net.price * 1.12
}
ronde (tot.price)
}

Als u deze code te sturen naar de console, kunt u de functie te testen. Bijvoorbeeld, als u gewerkt voor 25 uur, de volgende code geeft je de verschillende bedragen in rekening brengen publieke en private organisaties, respectievelijk:

> Prijscalculator (25, public = TRUE)
[1] 1060
> Prijscalculator (25, openbare = false)
[1] 1120

Dit werkt goed, maar hoe werkt het?

Als je kijkt naar de if ... else-statement in de vorige functie, vindt u deze elementen. Als de waarde van het argument openbare WAAR is, wordt de totale prijs berekend als 1,06 maal de netto prijs. Anders is de totale prijs is 1,12 keer de netto prijs.

De if moet een logische waarde tussen de haakjes. Een expressie je tussen de haakjes wordt geëvalueerd voordat het wordt doorgegeven aan de if-statement. Dus, als je met een logische waarde werkt direct, je hoeft niet naar een uitdrukking helemaal opgeven. Gebruik, bijvoorbeeld als (openbaar == TRUE) overbodig.

Ook in het geval van een if ... else-statement kunt u de beugel vallen als beide code blokken bestaan ​​van slechts een enkele regel code. Ja, kan je gewoon vergeten over de beugels en knijp de hele if ... else statement op een enkele lijn. Of je kan zelfs schrijven het als volgt:

als (openbare) tot.price <- net.price * 1,06 anders
tot.price <- net.price * 1.12

Aanbrengen van de else-statement aan het einde van een lijn en niet het begin van de volgende is een goed idee.

In het algemeen, R leest meerdere regels als één regel zolang het overduidelijk dat de opdracht nog niet is afgewerkt. Als je anders aan het begin van de tweede lijn, R beschouwt de eerste lijn klaar en klaagt. U kunt anders aan het begin van een volgende regel zet alleen als je dit doen binnen een functie en je de bron het volledige bestand in een keer naar R.

Maar je kunt dit korter te maken. De if werkt als een functie, en dus geeft hij ook een waarde. Als gevolg hiervan, kunt u die waarde toekennen aan een object of het te gebruiken in berekeningen. Dus in plaats van het opnieuw berekenen net.price en het toewijzen van het resultaat naar tot.price binnen de code blokken, kunt u de if ... else gebruiken als dit:

tot.price <- net.price * als (openbare) 1,06 anders 1,12

R zal eerst de if ... else statement te evalueren, en vermenigvuldig de uitkomst door net.price. Het resultaat hiervan wordt vervolgens tot.price toegewezen. Dit verschilt niet een jota van het resultaat van de vijf regels van de code die we gebruiken voor de originele als ... else statement.