Menu
Coddy logo textTech

復習:温度

CoddyのRジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 6/57。

challenge icon

チャレンジ

中級

Temperature.R に S3 クラス temperature を構築してください。温度は、属性 unit(C または F)を持つ数値です。

  • new_temperature(value, unit) は stopifnot() で型をチェックし、structure(value, unit = unit, class = "temperature") を返します。
  • validate_temperature(x) は、unit must be C or F というエラーで停止します。また、値が -273.15 C または -459.67 F を下回る場合は、below absolute zero というエラーで停止します。
  • temperature(value, unit = "C") は as.double() で値を変換し、単位を大文字にして、検証済みの温度を返します。
  • format.temperature() は小数点以下1桁で 21.5 C を返し、print.temperature() は Temperature: 21.5 C を出力して、invisible(x) を返します。
  • convert_to(t, unit) は指定された単位の温度を返します(単位がすでに一致している場合は同じ値を返します)。

すべての stop() で call. = FALSE を使用してください。提供されたコードは、行 21.5 c F(値、単位、変換先の単位)を読み込み、温度と変換後の温度を出力します。エラーの場合は、error: とメッセージを出力します。

コードは Temperature.R に記述してください。main.R には提供された入出力コードが含まれており、編集できません。

自分で試してみよう

source("Temperature.R")

# 提供された入出力コード: そのままにしておく
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 = ""))
}

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Rオンラインコンパイラ