Wie Chain Wenn & # 133-Else-Anweisungen in R

In einigen Fällen müssen Sie mehrere Möglichkeiten in R. Die machen ob und ansonsten Aussagen lassen Sie mit genau zwei Optionen, aber das Leben ist so, dass selten so einfach. Stellen Sie sich im Ausland einige Kunden haben.

Nehmen wir an, dass jeder Kunde im Ausland keine Mehrwertsteuer aus Gründen des Beispiels zu zahlen braucht. Dies lässt Sie jetzt mit drei unterschiedlichen Mehrwertsteuersätze: 12 Prozent für Privatkunden, 6 Prozent für öffentliche Auftraggeber, und keine für ausländische Kunden.

Die intuitive Art und Weise, dieses Problem zu lösen, ist nur die Auswahl der Kette. Wenn ein Kunde im Ausland lebt, berechnen keine Mehrwertsteuer. Andernfalls überprüfen Sie, ob der Client öffentlich oder privat ist und wenden Sie die entsprechenden Mehrwertsteuersatz.

Wenn Sie definieren ein Argument Klient Ihre Funktion übernehmen das kann die Werte 'im Ausland', 'Öffentlichkeit', und 'Privat', Sie könnte den vorherigen Algorithmus wie diesen Code:

if (Client == 'private') {tot.price lt; - net.price * 1.12 # 12% MwSt} else {if (Client == 'public') {tot.price lt; - net.price * 1.06 # 6% MwSt} else {tot.price lt; - net.price * 1 # 0% MwSt}}

Mit diesem Code können Sie die zweite Nest ansonsten Anweisung in der ersten ansonsten Erklärung. Das ist durchaus akzeptabel, und es wird funktionieren, aber vorstellen, was würden Sie tun müssen, wenn Sie hatte vier oder noch mehr Möglichkeiten. Nesting eine Erklärung in einer Erklärung in einer Erklärung in einer Anweisung erstellt schnell eine riesige geschweifte Chaos.

Zum Glück R ermöglicht es Ihnen, alle diesen Code ein bisschen mehr klar zu schreiben. Sie können die Kette der ansonsten Aussagen wie folgt:

if (Client == 'private') {tot.price lt; - net.price * 1,12} else if (Client == 'public') {tot.price lt; - net.price * 1,06} else {tot.price lt; - net.price}

In diesem Beispiel macht der Verkettungs einen Unterschied von nur zwei Streben, aber wenn man mehr Möglichkeiten haben, macht es Code lesbar. Beachten Sie, dass Sie nicht, ob das Argument zu testen Klient entspricht 'im Ausland' (Obwohl wäre es nicht falsch sein, das zu tun). Sie gehen davon aus, dass, wenn nur Klient hat keine der beiden anderen Werte, muss es sein 'im Ausland'.

gekettet ansonsten Anweisungen arbeiten zu einem Zeitpunkt auf einen einzigen Wert. Sie können diese nicht angekettet verwenden ansonsten Aussagen in einer vektorisiert Weise. Dafür können Sie nisten mehrere ansonsten Aussagen, wie folgt aus:

Mehrwertsteuer lt; - ifelse (Client == 'private', 1,12, ifelse (Client == 'public', 1,06, 1)) tot.price lt; - net.price * Mehrwertsteuer

Dieses Stück Code kann sehr verwirrend sein, wenn Sie mehr als drei Wahlen haben, wenn. Die Lösung hierfür ist, zu wechseln.

Menü