Reduce
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 35 de 64.
Reduce(f, x) combina los elementos de x en un solo valor: llama a f con los dos primeros elementos, después con ese resultado y el tercer elemento, y así sucesivamente. Con + lo suma todo:
print(Reduce(function(acc, x) acc + x, c(3, 5, 10)))
print(Reduce(`+`, 1:5))Salida:
[1] 18
[1] 15Los operadores como + también son funciones. Escritos entre comillas invertidas, `+` se pueden pasar como cualquier otra función. Reduce() resulta más útil cuando no existe una función incorporada para la combinación, como conservar la palabra más larga de dos palabras:
longer <- function(a, b) if (nchar(b) > nchar(a)) b else a
print(Reduce(longer, c("fig", "banana", "kiwi", "cherry")))Salida:
[1] "banana"El tercer argumento, init, es el valor inicial. Se utiliza como el primer acc y también es el resultado cuando x está vacío:
print(Reduce(`+`, c(), 0))
print(Reduce(function(acc, w) paste0(acc, toupper(substr(w, 1, 1))), c("portable", "network", "graphics"), ""))Salida:
[1] 0
[1] "PNG"accumulate = TRUE devuelve cada resultado intermedio en lugar de solo el último, lo que proporciona totales acumulados:
deposits <- c(100, -30, 50, -80)
print(Reduce(`+`, deposits, accumulate = TRUE))Salida:
[1] 100 70 120 40Desafío
FácilCompleta running_balance(start, changes). Partiendo de start, aplica cada cambio en orden. Devuelve una línea por cada cambio con el saldo después de aplicarlo, after 1: 70, y una última línea lowest: seguida del saldo más bajo alcanzado (incluido start).
El código proporcionado lee el saldo inicial y los cambios como una línea separada por comas e imprime cada línea devuelta.
Pruébalo tú mismo
running_balance <- function(start, changes) {
# Escribe tu código aquí
character(0)
}
# Código de entrada/salida suministrado: mantenlo tal como está
input <- suppressWarnings(readLines(file("stdin")))
cat(running_balance(as.numeric(input[1]), as.numeric(strsplit(input[2], ",")[[1]])), sep = "\n")
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Cadenas a fondo
Subcadenas con substr()Formateo con sprintf()Dividir y unirBuscar cadenasReemplazar textoRepaso - Constructor de nombres de usuario4Matrices
Creación de matricesIndexación de matricesResúmenes de filas y columnasAritmética de matricesRepaso: tabla de asientos2Búsquedas clave-valor
Búsquedas en vectores con nombreComprobar clavesAñadir y eliminar clavesRecorrer nombresRepaso: panel bursátil5Proyecto - Libro de calificaciones
Añadir estudiantesRegistrar calificaciones3Conjuntos y conteo
Valores únicosOperaciones con conjuntosPruebas de pertenenciaConteo con table()Repaso: invitados al evento6Funciones como valores
Funciones anónimasPasar funcionesDevolver funcionesClausuras con estadoRepaso: reglas de descuento9Marcos de datos
Creación de marcos de datosColumnas y filasFiltrado de filasAdición y ordenaciónRepaso - Informe de ventas12Proyecto: Rastreador de gastos
Registro de gastosGasto totalPractica por tu cuenta: Compilador de R online