R에서 예외 처리에 대한 예제 / 튜토리얼이 있습니까? 공식 문서는 매우 간결합니다.
R에서 예외 처리에 대한 예제 / 튜토리얼이 있습니까? 공식 문서는 매우 간결합니다.
답변:
다른 StackOverflow 토론을 가리키는 Shane의 답변 외에도 코드 검색 기능을 사용해 볼 수 있습니다. Google의 코드 검색에 대한 원래 답변은 이후 중단되었지만 시도해 볼 수 있습니다.
기록을 위해서도 try
있지만 더 좋을 tryCatch
수도 있습니다. Google 코드 검색에서 빠른 계산을 시도했지만 동사 자체에 대해 너무 많은 오 탐지가 발생했지만 tryCatch
더 널리 사용되는 것 같습니다 .
기본적으로 tryCatch()
기능 을 사용하고 싶습니다 . 자세한 내용은 help ( "tryCatch")를 참조하십시오.
다음은 간단한 예입니다 (오류로 원하는 모든 작업을 수행 할 수 있음을 명심하십시오).
vari <- 1
tryCatch(print("passes"), error = function(e) print(vari), finally=print("finished"))
tryCatch(stop("fails"), error = function(e) print(vari), finally=print("finished"))
다음과 같은 관련 질문을 살펴보십시오.
관련 Google 검색의 결과는 http://biocodenv.com/wordpress/?p=15 입니다.
for(i in 1:16){
result <- try(nonlinear_modeling(i));
if(class(result) == "try-error") next;
}
이 기능 trycatch()
은 매우 간단하며 이에 대한 좋은 튜토리얼이 많이 있습니다. R에 오류 처리의 우수한 설명은 해들리 위컴의 책에서 찾을 수 있습니다 고급-R , 무엇을 다음과 것은이다 매우 기본적인 소개 withCallingHandlers()
와 withRestarts()
가능한 몇 마디로에서 :
저수준 프로그래머가 절대 값을 계산하는 함수를 작성한다고 가정 해 보겠습니다. 그는 그것을 계산하는 방법을 모르지만 오류를 구성하는 방법을 알고 있으며 자신의 순진함을 부지런히 전달합니다.
low_level_ABS <- function(x){
if(x<0){
#construct an error
negative_value_error <- structure(
# with class `negative_value`
class = c("negative_value","error", "condition"),
list(message = "Not Sure what to with a negative value",
call = sys.call(),
# and include the offending parameter in the error object
x=x))
# raise the error
stop(negative_value_error)
}
cat("Returning from low_level_ABS()\n")
return(x)
}
중간 수준의 프로그래머는 절대 값을 계산하는 함수를 작성하여 매우 불완전한 low_level_ABS
함수를 사용 합니다. 그는 negative_value
의 값 x
이 음수 일 때 하위 수준 코드가 오류를 던지고 사용자가 오류 에서 복구 (또는 복구하지 않음) 하는 방식을 제어 할 수 있도록 하는 a 를 설정하여 문제에 대한 해결책을 제안 한다는 것을 알고 restart
있습니다 .mid_level_ABS
mid_level_ABS
negative_value
mid_level_ABS <- function(y){
abs_y <- withRestarts(low_level_ABS(y),
# establish a restart called 'negative_value'
# which returns the negative of it's argument
negative_value_restart=function(z){-z})
cat("Returning from mid_level_ABS()\n")
return(abs_y)
}
마지막으로 고급 프로그래머는 mid_level_ABS
함수를 사용하여 절대 값을 계산 하고 재시작 처리기를 사용하여 오류 mid_level_ABS
에서 복구하도록 지시하는 조건 처리기를 설정
negative_value
합니다.
high_level_ABS <- function(z){
abs_z <- withCallingHandlers(
# call this function
mid_level_ABS(z) ,
# and if an `error` occurres
error = function(err){
# and the `error` is a `negative_value` error
if(inherits(err,"negative_value")){
# invoke the restart called 'negative_value_restart'
invokeRestart('negative_value_restart',
# and invoke it with this parameter
err$x)
}else{
# otherwise re-raise the error
stop(err)
}
})
cat("Returning from high_level_ABS()\n")
return(abs_z)
}
이 모든 것의 요점은 withRestarts()
and 를 사용 withCallingHandlers()
하여 함수
high_level_ABS
가 의 실행을 중지하지 않고
mid_level_ABS
오류로 인해 발생한 오류를 복구하는 방법을 알려줄 수 있다는 것입니다 .low_level_ABS
mid_level_ABS
tryCatch()
> high_level_ABS(3)
Returning from low_level_ABS()
Returning from mid_level_ABS()
Returning from high_level_ABS()
[1] 3
> high_level_ABS(-3)
Returning from mid_level_ABS()
Returning from high_level_ABS()
[1] 3
실제로 는 많은 호출 (수백만 번까지) low_level_ABS
하는 함수 mid_level_ABS
를 나타내며, 올바른 오류 처리 방법은 상황에 따라 다를 수 있으며 특정 오류를 처리하는 방법의 선택은 더 높은 수준의 함수 ( high_level_ABS
)에 맡겨집니다 .