A Função switch()
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 47 de 64.
switch(x, name = value, ...) compara o texto x com os nomes e retorna o valor daquele que corresponde. Ele substitui uma longa sequência de comparações else if com a mesma variável:
size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)Saída:
[1] 3Um último valor sem nome é o padrão, usado quando nada corresponde. Sem um padrão, um switch() sem correspondência retorna NULL silenciosamente:
day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))Saída:
[1] "work"
[1] TRUEUm valor vazio passa para o próximo, portanto vários nomes podem compartilhar um resultado:
kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))Saída:
[1] "weekend"
[1] "weekday"Os valores podem ser blocos inteiros de código entre chaves, e o resultado é a última expressão do bloco que é executada:
area <- function(shape, a, b = a) {
switch(shape,
square = a^2,
rect = a * b,
circle = {
r <- a / 2
round(pi * r^2, 2)
},
NA)
}
print(area("rect", 3, 4))
print(area("circle", 10))Saída:
[1] 12
[1] 78.54Desafio
FácilComplete calculate(a, op, b). op é um entre plus, minus, times e over. Retorne o resultado de aplicá-lo a a e b, ou unknown operation para qualquer outro op. A divisão por zero retorna cannot divide by zero.
O código fornecido lê a, op e b (um por linha) e imprime o valor retornado.
Experimente você mesmo
calculate <- function(a, op, b) {
# Escreva seu código aqui
"unknown operation"
}
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), sep = "\n")
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings em Profundidade
Substrings com substr()Formatação com sprintf()Dividindo e UnindoPesquisando StringsSubstituindo TextoRecapitulação - Criador de Nome de Usuário4Matrizes
Criando MatrizesIndexando MatrizesResumos de Linhas e ColunasAritmética de MatrizesRecapitulação - Tabela de Assentos10Fluxo de Controle Avançado
A Função switch()ifelse() Vetorizadorepeat e breakFunções RecursivasRevisão — Classificador de Notas2Consultas de Chave-Valor
Consultas em Vetores NomeadosVerificando ChavesAdicionando e Removendo ChavesPercorrendo NomesRecapitulação - Mesa de Ações5Projeto - Boletim de Notas
Adicionando AlunosRegistrando Notas3Conjuntos e Contagem
Valores ÚnicosOperações com ConjuntosTestes de PertinênciaContagem com table()Recapitulação - Convidados do Evento6Funções como Valores
Funções AnônimasPassando FunçõesRetornando FunçõesClosures com EstadoRecapitulação - Regras de Desconto9Data Frames
Criando Data FramesColunas e LinhasFiltrando LinhasAdicionando e OrdenandoRecapitulação - Relatório de Vendas12Projeto - Rastreador de Despesas
Registro de DespesasGastos TotaisPratique por conta própria: Compilador de R online