Reduce
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 35 de 64.
Reduce(f, x) combina os elementos de x em um único valor: chama f nos dois primeiros elementos, depois nesse resultado e no terceiro elemento, e assim por diante. Com +, ele soma tudo:
print(Reduce(function(acc, x) acc + x, c(3, 5, 10)))
print(Reduce(`+`, 1:5))Saída:
[1] 18
[1] 15Operadores como + também são funções. Escrita entre crases, `+` pode ser passada como qualquer outra função. Reduce() é mais útil quando não há uma função integrada para a combinação, como manter a mais longa entre duas palavras:
longer <- function(a, b) if (nchar(b) > nchar(a)) b else a
print(Reduce(longer, c("fig", "banana", "kiwi", "cherry")))Saída:
[1] "banana"O terceiro argumento, init, é o valor inicial. Ele é usado como o primeiro acc e também é o resultado quando x está vazio:
print(Reduce(`+`, c(), 0))
print(Reduce(function(acc, w) paste0(acc, toupper(substr(w, 1, 1))), c("portable", "network", "graphics"), ""))Saída:
[1] 0
[1] "PNG"accumulate = TRUE retorna cada resultado intermediário em vez de apenas o último, o que fornece totais acumulados:
deposits <- c(100, -30, 50, -80)
print(Reduce(`+`, deposits, accumulate = TRUE))Saída:
[1] 100 70 120 40Desafio
FácilComplete running_balance(start, changes). Começando por start, aplique cada alteração na ordem. Retorne uma linha por alteração com o saldo depois dela, after 1: 70, e uma última linha lowest: seguida pelo menor saldo alcançado (incluindo start).
O código fornecido lê o saldo inicial e as alterações como uma linha separada por vírgulas e imprime cada linha retornada.
Experimente você mesmo
running_balance <- function(start, changes) {
# Escreva seu código aqui
character(0)
}
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
cat(running_balance(as.numeric(input[1]), as.numeric(strsplit(input[2], ",")[[1]])), 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