Video: Why do we sleep? | Russell Foster 2024
I vissa fall måste du göra flera val i R. Om och om … andra påståenden lämnar dig med exakt två alternativ, men livet är sällan så enkelt som det. Tänk dig att du har några kunder utomlands.
Låt oss anta att någon klient utomlands inte behöver betala moms för exemplets skull. Detta ger dig nu tre olika mervärdesskattesatser: 12 procent för privata kunder, 6 procent för offentliga kunder och ingen för utländska kunder.
Det mest intuitiva sättet att lösa detta problem är bara att kedja valet. Om en kund bor utomlands, debiterar ingen moms. Annars ska du kontrollera om klienten är offentlig eller privat och tillämpar den relevanta mervärdesskattesatsen.
Om du definierar en argumentklient för din funktion som kan ta värdena utomlands, "offentliga" och "privata" kan du koda den tidigare algoritmen så här:
om (klient == 'privat') {tot. pris <- netto. pris * 1. 12 # 12% moms} annat {om (klient == "offentligt") {tot. pris <- netto. pris * 1. 06 # 6% moms} annat {tot. pris <- netto. pris * 1 # 0% moms}}
Med den här koden, nestar du den andra om … annat uttalande i det första om … annat uttalande. Det är helt acceptabelt och det kommer att fungera, men tänk vad du skulle behöva om du hade fyra eller fler möjligheter. Att skapa ett uttalande i ett uttalande i ett uttalande i ett uttalande skapar snabbt en enorm lockig röra.
Lyckligtvis låter R dig skriva all den koden lite tydligare. Du kan kedja om … annat uttalanden enligt följande:
om (klient == 'privat') {tot. pris <- netto. pris * 1. 12} annat om (klient == "offentligt") {tot. pris <- netto. pris * 1. 06} annat {tot. pris <- netto. pris}
I det här exemplet gör kedjan en skillnad på bara två axlar, men när du har fler möjligheter gör det kodläsbar. Observera att du inte behöver testa om argumentklienten är lika med "utomlands" (även om det inte skulle vara fel att göra det). Du antar bara att om kunden inte har någon av de två andra värdena, måste den vara "utomlands".
Kedjad om … andra påståenden fungerar på ett enda värde i taget. Du kan inte använda dessa chained om … annat uttalanden på ett vektoriserat sätt. För det kan du hyra flera ifelse-uttalanden, så här:
Moms <- ifelse (klient == 'privat', 1. 12, ifelse (klient == 'allmänhet', 1. 06, 1)) tot. pris <- netto. pris * moms
Denna del av koden kan bli ganska förvirrande om du har mer än tre val. Lösningen på detta är att byta.