repeat y break
Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 49 de 64.
repeat ejecuta su cuerpo una y otra vez hasta que un break dentro de él detiene el bucle. Es adecuado para un bucle cuya condición de salida solo se conoce en medio del cuerpo:
n <- 1
repeat {
n <- n * 2
if (n > 50) break
}
print(n)Salida:
[1] 64La secuencia de Collatz es un ejemplo: divide los números pares entre dos, convierte los impares en 3n + 1 y detente en 1. El número de pasos no se conoce de antemano:
n <- 6
steps <- 0
repeat {
if (n == 1) break
n <- if (n %% 2 == 0) n / 2 else 3 * n + 1
steps <- steps + 1
}
print(steps)Salida:
[1] 8next omite el resto de la iteración actual y comienza la siguiente. Funciona en los bucles repeat, while y for:
for (x in 1:8) {
if (x %% 3 == 0) next
cat(x, "")
}
cat("\n")Salida:
1 2 4 5 7 8 Un bucle repeat sin un break alcanzable nunca termina. Mantén un contador como límite de seguridad cuando la salida dependa de los datos:
total <- 0
tries <- 0
repeat {
tries <- tries + 1
total <- total + tries
if (total >= 20 || tries == 100) break
}
print(c(tries, total))Salida:
[1] 6 21Desafío
FácilCompleta digital_root(n). Reemplaza n por la suma de sus dígitos hasta que quede un solo dígito y devuelve <result> after <steps> steps: 9875 da 2 after 3 steps (9875, 29, 11, 2). Un número que ya tiene un solo dígito requiere 0 pasos.
sum(as.numeric(strsplit(as.character(n), "")[[1]])) suma los dígitos de n.
El código proporcionado lee n e imprime el valor devuelto.
Pruébalo tú mismo
digital_root <- function(n) {
# Escribe tu código aquí
""
}
# Código de entrada/salida suministrado: déjalo tal como está
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[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 asientos10Flujo de control avanzado
La función switch()ifelse() vectorizadorepeat y breakFunciones recursivasRepaso - Clasificador de calificaciones2Bú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