R Language
내결함성 / 복원력있는 코드
수색…
매개 변수
매개 변수 | 세부 |
---|---|
expr | "try part"가 성공적으로 완료되면 tryCatch 는 마지막으로 평가 된 표현식을 반환합니다. 따라서 모든 것이 잘되고 예외가없는 경우 (즉, 경고 또는 오류 ) readLines 의 반환 값은 실제 값이 반환됩니다. 당신이를 통해 상태를 반환 값을 explicilty 할 필요는 없습니다 return 은 "시도 할 부분"코드로 (경고 및 오류가 아래의 조건 핸들러는 달리) 함수 환경을 insided 포장되지 않은 |
경고 / 오류 / 기타 | 명시 적으로 처리하려는 모든 조건에 대한 처리기 함수를 제공하거나 정의하십시오. AFAIU, 각각의 핸들러 함수 의 이름이 각각의 조건의 클래스와 일치하는 한 모든 유형의 조건 ( 경고 및 오류 뿐만 아니라 사용자 정의 조건뿐만 아니라 simpleCondition 조건 및 친구들 참조)에 대한 핸들러를 제공 할 수 있습니다 tryCatch 에 대한 문서의 세부 정보 부분). |
마침내 | 여기에 "try part"의 표현이 성공했는지 또는 어떤 조건이 있었는지에 관계없이 맨 마지막에서 실행해야하는 모든 것이 있습니다. 둘 이상의 표현식을 실행하려면 중괄호로 묶어야합니다. 그렇지 않으면 finally = <expression> ( "try part"와 같은 논리)을 작성할 수 있습니다. |
비고
tryCatch
tryCatch
는 조건이 없으면 expr
실행과 관련된 값을 반환합니다. 경고 또는 오류입니다. 만약, 특정 리턴 값 (예, return(NA)
상기 ()는 인수 참조 각 조건 핸들러 함수를 공급함으로써 지정 될 수 warning
와 error
에 ?tryCatch
). 이미 존재하는 함수가 될 수 있지만 tryCatch
내에서 정의 할 수도 있습니다 (앞에서와 같이).
핸들러 함수의 특정 반환 값 선택시 의미
"try part"에 오류가있을 경우 NA
를 반환하도록 지정 했으므로 y
의 세 번째 요소는 NA
입니다. 우리가 반환 값으로 NULL
을 선택 lapply
가 NULL
반환 값을 "무시 / 삭제"하기 때문에 y
의 길이는 3
대신 2
가 NULL
. 또한이를 통해 명시 적으로 반환 값을 지정하지 않을 경우주의 return
, 핸들러 함수가 반환됩니다 NULL
(즉, 오류 또는 경고 조건의 경우).
"원하지 않는"경고 메시지
우리의 세 번째 요소하면 urls
벡터는 우리의 기능 안타, 우리는 오류가 (발생한다는 사실 이외에 다음과 같은 경고 얻을 readLines
먼저 실제로 오류가 실패하기 전에 경고를 통해 연결을 열 수 없다는 불평을) :
Warning message:
In file(con, "r") : cannot open file 'I'm no URL': No such file or directory
오류 가 경고 보다 "이기므로"이 특별한 경우에 경고에 정말로 관심이 없습니다. 따라서 우리는 readLines
에서 warn = FALSE
를 설정했지만, 아무런 효과가없는 것처럼 보입니다. 경고를 표시하지 않을 수있는 또 다른 방법은
suppressWarnings(readLines(con = url))
대신에
readLines(con = url, warn = FALSE)
tryCatch () 사용하기
주어진 URL에서 HTML 코드를 읽는 강력한 버전의 함수를 정의하고 있습니다. 우리가 무언가가 잘못되거나 (오류) 또는 우리가 계획했던대로 (경고)하는 상황을 처리하기를 원한다는 점에서 견고 합니다. 오류 및 경고의 포괄적 인 용어는 조건입니다.
tryCatch
사용한 함수 정의
readUrl <- function(url) {
out <- tryCatch(
########################################################
# Try part: define the expression(s) you want to "try" #
########################################################
{
# Just to highlight:
# If you want to use more than one R expression in the "try part"
# then you'll have to use curly brackets.
# Otherwise, just write the single expression you want to try and
message("This is the 'try' part")
readLines(con = url, warn = FALSE)
},
########################################################################
# Condition handler part: define how you want conditions to be handled #
########################################################################
# Handler when a warning occurs:
warning = function(cond) {
message(paste("Reading the URL caused a warning:", url))
message("Here's the original warning message:")
message(cond)
# Choose a return value when such a type of condition occurs
return(NULL)
},
# Handler when an error occurs:
error = function(cond) {
message(paste("This seems to be an invalid URL:", url))
message("Here's the original error message:")
message(cond)
# Choose a return value when such a type of condition occurs
return(NA)
},
###############################################
# Final part: define what should happen AFTER #
# everything has been tried and/or handled #
###############################################
finally = {
message(paste("Processed URL:", url))
message("Some message at the end\n")
}
)
return(out)
}
테스트 물건
하나의 요소가 유효한 URL이 아닌 URL의 벡터를 정의합시다
urls <- c(
"http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html",
"http://en.wikipedia.org/wiki/Xz",
"I'm no URL"
)
그리고 이것을 위에서 정의한 함수의 입력으로 전달합니다.
y <- lapply(urls, readUrl)
# Processed URL: http://stat.ethz.ch/R-manual/R-devel/library/base/html/connections.html
# Some message at the end
#
# Processed URL: http://en.wikipedia.org/wiki/Xz
# Some message at the end
#
# URL does not seem to exist: I'm no URL
# Here's the original error message:
# cannot open the connection
# Processed URL: I'm no URL
# Some message at the end
#
# Warning message:
# In file(con, "r") : cannot open file 'I'm no URL': No such file or directory
산출물 조사
length(y)
# [1] 3
head(y[[1]])
# [1] "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"
# [2] "<html><head><title>R: Functions to Manipulate Connections</title>"
# [3] "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
# [4] "<link rel=\"stylesheet\" type=\"text/css\" href=\"R.css\">"
# [5] "</head><body>"
# [6] ""
y[[3]]
# [1] NA