Como Corrente se e Demonstrações # 133-o mais no R

Em alguns casos, você precisará fazer várias escolhas em R. A E se e if ... else declarações deixá-lo com exatamente duas opções, mas a vida raramente é tão simples como isso. Imagine que você tem alguns clientes no exterior.

Vamos supor que qualquer cliente no exterior não precisa pagar IVA por causa do exemplo. Isto deixa-o agora com três diferentes taxas de IVA: 12 por cento para clientes privados, 6 por cento para clientes públicos, e nenhum para clientes estrangeiros.

A maneira mais intuitiva para resolver este problema é apenas para encadear as escolhas. Se um cliente está vivendo no exterior, não cobrar qualquer imposto. Caso contrário, verifique se o cliente é pública ou privada e aplicar a taxa de IVA relevante.

Se você definir um argumento cliente para a sua função que pode tomar os valores 'no exterior', 'público', e 'privado', você pode codificar o algoritmo anterior como este:

if (cliente == 'private') {tot.price lt; - net.price * 1,12 # 12% IVA} else {if (cliente == 'público') {tot.price lt; - net.price * 1,06 # 6% de IVA} else {tot.price lt; - net.price * 1 # 0% de IVA}}

Com este código, você aninhar o segundo if ... else declaração no primeiro if ... else declaração. Isso é perfeitamente aceitável e ele vai trabalhar, mas imagine o que você teria que fazer se você tivesse quatro ou mesmo mais possibilidades. Nidificação uma declaração em uma declaração em uma declaração em um comunicado rapidamente cria uma grande confusão encaracolados.

Felizmente, R permite que você escreva todo o código um pouco mais claramente. Você pode encadear o if ... else declarações da seguinte forma:

if (cliente == 'private') {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

Neste exemplo, o encadeamento faz uma diferença de apenas duas chaves, mas quando você tem mais possibilidades, faz código legível. Note que você não tem que testar se o argumento cliente é igual a 'no exterior' (Apesar de que não seria errado fazer isso). Você acabou de assumir que se cliente não tem qualquer um dos outros dois valores, que tem que ser 'no exterior'.

acorrentado if ... else demonstrações trabalhar em um único valor de cada vez. Você não pode usá-los acorrentados if ... else declarações de uma forma vectorized. Para isso, você pode múltipla ninho ifelse declarações, como este:

CUBA lt; - ifelse (cliente ==, 1,12, ifelse (cliente ==, 1,06, 1) 'público' 'private') tot.price lt; - net.price * IVA

Este pedaço de código pode se tornar bastante confuso se você tiver mais de três escolhas, embora. A solução para isso é para mudar.

menu