Menu
Coddy logo textTech

Reduce

Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 35 sur 64.

Reduce(f, x) combine les éléments de x en une seule valeur : il appelle f sur les deux premiers éléments, puis sur ce résultat et le troisième élément, et ainsi de suite. Avec +, il additionne tout :

print(Reduce(function(acc, x) acc + x, c(3, 5, 10)))
print(Reduce(`+`, 1:5))

Sortie :

[1] 18
[1] 15

Les opérateurs tels que + sont également des fonctions. Écrit entre accents graves, `+` peut être transmis comme n’importe quelle autre fonction. Reduce() est particulièrement utile lorsqu’il n’existe aucune fonction intégrée pour effectuer la combinaison, par exemple pour conserver le plus long de deux mots :

longer <- function(a, b) if (nchar(b) > nchar(a)) b else a
print(Reduce(longer, c("fig", "banana", "kiwi", "cherry")))

Résultat :

[1] "banana"

Le troisième argument, init, est la valeur de départ. Il est utilisé comme premier acc, et c’est également le résultat lorsque x est vide :

print(Reduce(`+`, c(), 0))
print(Reduce(function(acc, w) paste0(acc, toupper(substr(w, 1, 1))), c("portable", "network", "graphics"), ""))

Sortie :

[1] 0
[1] "PNG"

accumulate = TRUE renvoie chaque résultat intermédiaire au lieu du dernier uniquement, ce qui donne des totaux cumulés :

deposits <- c(100, -30, 50, -80)
print(Reduce(`+`, deposits, accumulate = TRUE))

Sortie :

[1] 100  70 120  40
challenge icon

Défi

Facile

Complétez running_balance(start, changes). En partant de start, appliquez chaque changement dans l’ordre. Retournez une ligne par changement avec le solde après celui-ci, after 1: 70, puis une dernière ligne lowest: suivie du solde le plus bas atteint (y compris start).

Le code fourni lit le solde de départ et les changements sous forme d’une ligne séparée par des virgules, puis affiche chaque ligne retournée.

Essayez vous-même

running_balance <- function(start, changes) {
  # Écrivez votre code ici
  character(0)
}

# Code d'entrée/sortie fourni : conservez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(running_balance(as.numeric(input[1]), as.numeric(strsplit(input[2], ",")[[1]])), sep = "\n")
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique et flux d’exécution

Entraînez-vous par vous-même : Compilateur R en ligne