Menu
Coddy logo textTech

Repaso: temperaturas

Parte de la sección Programación orientada a objetos del Journey de R de Coddy. Lección 6 de 57.

challenge icon

Desafío

Intermedio

Construye la clase S3 temperature en Temperature.R. Una temperatura es un número con un atributo unit (C o F).

  • new_temperature(value, unit) comprueba los tipos con stopifnot() y devuelve structure(value, unit = unit, class = "temperature").
  • validate_temperature(x) se detiene con unit must be C or F, o con below absolute zero cuando el valor es inferior a -273.15 C o -459.67 F.
  • temperature(value, unit = "C") convierte el valor con as.double(), convierte la unidad a mayúsculas y devuelve una temperatura validada.
  • format.temperature() devuelve 21.5 C con una posición decimal, y print.temperature() imprime Temperature: 21.5 C y devuelve invisible(x).
  • convert_to(t, unit) devuelve una temperatura en la unidad indicada (el mismo valor cuando la unidad ya coincide).

Usa call. = FALSE en cada stop(). El código proporcionado lee líneas 21.5 c F (valor, unidad, unidad de destino), imprime la temperatura y la convertida, o error: y el mensaje.

Tu código va en Temperature.R. main.R contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

source("Temperature.R")

# Código de entrada/salida suministrado: déjalo tal como está
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
  p <- strsplit(line, " ")[[1]]
  result <- tryCatch({
    t <- temperature(p[1], p[2])
    print(t)
    print(convert_to(t, p[3]))
    NULL
  }, error = function(e) cat("error: ", conditionMessage(e), "\n", sep = ""))
}

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de R online