Comment déclarations à la chaîne si r & # 133-else

Dans certains cas, vous aurez besoin pour faire des choix multiples dans R. Le si et sinon déclarations vous laisse avec exactement deux options, mais la vie est rarement aussi simple que cela. Imaginez que vous avez des clients à l'étranger.

Supposons que tout client n'a pas besoin de payer la TVA à l'étranger pour le bien de l'exemple. Cela vous laisse maintenant avec trois taux de TVA différents: 12 pour cent pour des clients privés, de 6 pour cent pour les clients publics, et aucun pour les clients étrangers.

La façon la plus intuitive pour résoudre ce problème est juste à la chaîne les choix. Si un client est vivant à l'étranger, ne facturent pas de TVA. Sinon, vérifier si le client est public ou privé et d'appliquer le taux de TVA applicable.

Si vous définissez un argument client pour votre fonction qui peut prendre les valeurs 'étranger', «public», et «privé», vous pouvez coder l'algorithme précédent comme ceci:




si (client == 'privée') {tot.price lt; - net.price * 1.12 # TVA à 12%} else {if (client == 'public') {tot.price lt; - net.price * 1.06 # TVA à 6%} else {tot.price lt; - net.price * 1 # 0% TVA}}

Avec ce code, vous le deuxième nid sinon déclaration dans le premier sinon déclaration. Cela est parfaitement acceptable et il va fonctionner, mais imaginez ce que vous auriez à faire si vous aviez quatre ou encore plus de possibilités. Imbriquant un témoignage dans une déclaration dans un communiqué, dans une déclaration crée rapidement un énorme gâchis bouclés.

Heureusement, R vous permet d'écrire tout ce que le code un peu plus clairement. Vous pouvez enchaîner le sinon déclarations comme suit:

si (client == 'privée') {tot.price lt; - net.price * 1.12} else if (client == 'public') {tot.price lt; - net.price * 1,06} else {tot.price lt; - net.price}

Dans cet exemple, le chaînage fait une différence de seulement deux accolades, mais quand vous avez plus de possibilités, il rend le code plus lisible. Notez que vous ne disposez pas de tester si l'argument client est égal à 'étranger' (bien que ce ne serait pas mal de faire cela). Vous assumez juste que si client n'a aucune des deux autres valeurs, il doit être 'étranger'.

Enchaîné sinon déclarations travaillent sur une valeur unique à la fois. Vous ne pouvez pas utiliser ces enchaîné sinon déclarations d'une manière vectorisé. Pour cela, vous pouvez imbriquer plusieurs sinon déclarations, comme ceci:

TVA lt; - ifelse (client ==, 1.12, ifelse (client ==, 1.06, 1) 'public' 'privée') tot.price lt; - net.price * TVA

Ce morceau de code peut devenir assez déroutant si vous avez plus de trois choix, cependant. La solution à cela est de passer.


» » » » Comment déclarations à la chaîne si r & # 133-else