Menu
Coddy logo textTech

경고와 finally

Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 54번째.

경고는 중단하지 않고 문제를 알립니다. 함수는 값을 반환하고 R은 마지막에 경고를 출력합니다. as.numeric()은 숫자가 아닌 텍스트에 대해 경고하고 NA를 반환합니다:

x <- as.numeric("abc")
print(x)

출력:

[1] NA
Warning message:
NAs introduced by coercion 

오류와 마찬가지로 경고는 오류 스트림으로 전송되므로 Coddy에서는 테스트가 실패합니다. 직접 결과를 확인할 때는 suppressWarnings()로 경고를 표시하지 않을 수 있으며, tryCatch(..., warning = )는 경고를 값으로 변환합니다:

x <- suppressWarnings(as.numeric("abc"))
print(is.na(x))
r <- tryCatch(as.numeric("abc"), warning = function(w) paste("warned:", conditionMessage(w)))
print(r)

출력:

[1] TRUE
[1] "warned: NAs introduced by coercion"

warning("message")는 자체 코드에서 경고를 발생시킵니다. 경고를 처리하는 핸들러는 오류를 처리하는 핸들러와 같은 방식으로 작동합니다:

ratio <- function(a, b) {
  if (b == 0) warning("b is zero, returning Inf")
  a / b
}
r <- tryCatch(ratio(1, 0), warning = function(w) conditionMessage(w))
print(r)

출력:

[1] "b is zero, returning Inf"

finally = ...는 오류가 발생했는지 여부와 관계없이 표현식과 모든 핸들러가 실행된 후에 실행됩니다. 닫는 메시지와 같이 반드시 항상 실행되어야 하는 작업에 사용하세요:

load <- function(x) {
  tryCatch({
    if (x < 0) stop("negative")
    x * 10
  }, error = function(e) NA,
  finally = cat("finished", x, "\n"))
}
print(load(2))
print(load(-1))

출력:

finished 2 
[1] 20
finished -1 
[1] NA
challenge icon

챌린지

쉬움

to_numbers(texts)를 완성하세요. 모든 텍스트를 숫자로 변환하세요. 변환할 수 없는 값은 경고를 출력하지 않고 NA가 됩니다. 두 줄을 반환하세요. 변환된 숫자를 공백으로 연결한 Numbers: (NA 값 포함)와 변환에 실패한 값의 개수를 나타내는 Invalid: 입니다.

제공된 코드는 텍스트를 쉼표로 구분된 한 줄로 읽고 반환된 각 줄을 출력합니다.

직접 해보기

to_numbers <- function(texts) {
  # 여기에 코드를 작성하세요
  c("Numbers: ", "Invalid: 0")
}

# 제공된 입력/출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
cat(to_numbers(strsplit(input[1], ",")[[1]]), sep = "\n")
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 R 컴파일러