Cómo declaraciones en r para la cadena si & # 133-else

En algunos casos, usted tendrá que hacer varias elecciones en R. El si y if ... else declaraciones que dejan con exactamente dos opciones, pero la vida es rara vez tan simple como eso. Imagine que tiene algunos clientes en el extranjero.

Vamos a suponer que cualquier cliente en el extranjero no tiene que pagar el IVA por el bien del ejemplo. Esto le deja ahora con tres diferentes tipos de IVA: 12 por ciento para clientes privados, un 6 por ciento para los clientes del sector público, y ninguno para los clientes extranjeros.

La manera más intuitiva para resolver este problema es sólo para la cadena de las opciones. Si un cliente está viviendo en el extranjero, no cobran el IVA. De lo contrario, compruebe si el cliente es público o privado y se aplica el tipo de IVA correspondiente.

Si define un argumento cliente para su función que puede tomar los valores 'extranjero', "público", y "privado", usted podría codificar el algoritmo anterior así:

si (cliente == "privado") {tot.price lt; - net.price * 1.12 # 12% de IVA} else {if (cliente == "público") {tot.price lt; - net.price * 1.06 # 6% IVA} else {tot.price lt; - net.price * 1 # 0% de IVA}}

Con este código, nido de la segunda if ... else declaración en el primero if ... else comunicado. Eso es perfectamente aceptable y va a funcionar, pero imaginar lo que tendría que hacer si usted tenía cuatro o incluso más posibilidades. La jerarquización una declaración en un comunicado, en un comunicado en un comunicado crea rápidamente en uno lío enorme rizado.

Por suerte, R le permite escribir todo ese código un poco más claramente. Puede encadenar la if ... else declaraciones como sigue:

si (cliente == "privado") {tot.price lt; - net.price * 1,12} else if (cliente == "público") {tot.price lt; - net.price * 1,06} else {tot.price lt; - net.price}

En este ejemplo, el encadenamiento hace una diferencia de sólo dos llaves, pero cuando se tiene más posibilidades, que hace que el código legible. Tenga en cuenta, que usted no tiene que probar si el argumento cliente es igual a 'extranjero' (aunque no estaría mal hacer eso). Usted acaba de asumir que si cliente no tiene cualquiera de los otros dos valores, tiene que ser 'extranjero'.

Encadenado if ... else declaraciones trabajan en un valor único a la vez. No puede utilizar estos encadenado if ... else declaraciones en una forma vectorizada. Por eso, usted puede múltiple nido ifelse declaraciones, como este:

IVA lt; - ifelse (cliente ==, 1.12, ifelse (cliente ==, 1.06, 1) 'pública' 'privado') tot.price lt; - net.price * IVA

Esta pieza de código puede llegar a ser bastante confuso si usted tiene más de tres opciones, sin embargo. La solución a esto es para cambiar.




» » » » Cómo declaraciones en r para la cadena si & # 133-else