2014-12-16 2 views
2

내가 해들리 위컴의 고급 R 장에 주어진 예를 이해하려고 노력 중이 야 '예외 및 디버깅'여기S3 사용자 지정 오류

와 tryCatch 결합 예제 코드는 tryCatch()을 사용하여 다양한 유형의 오류에 대해 다른 작업을 수행 할 수 있습니다. "

여기에 tryCatch 성명의 요지는 무엇입니까?

my_log 함수가 음수 값을 양수로 설정 한 다음 로그를 반환하려면 해당 코드를 custom_stop("invalid_value"...) 행 아래에 넣으면됩니다.

제 목표는 오류를 처리하는 기능을 일관되고 유익한 방법으로 작성하는 것입니다.

감사합니다.

답변

0

사용자 정의 조건을 방출의 주요 장점은 기능이 기능이 실패 방법을 알고 수정하지 않는 사람을 할 수 있다는 것입니다. 예를 들어, 사용자가 다른 유형의 실패에 대해 다르게 대응할 수 있기를 원한다고 가정 해보십시오. stop을 방금 사용한 경우 프로그래밍 방식으로 오류의 특성을 쉽게 판단 할 수 없습니다. 위는 예시 완전히 강력한, 정말 될 운명되지

x <- "1.1" 
tryCatch(
    my_log(x), 
    invalid_class=function(c) my_log(as.numeric(x)), 
    invalid_value=function(c) my_log(abs(x)) 
) 

주 당신은 아마 발생하는 모든 조건을 기록하려면이 아닌 것 : 같은

예를 들어, 내가 코드를 작성할 수 있습니다 자동으로 문제를 우회하려고 시도하지만 희망 사항은 사용자 정의 조건이 사용자에게 유용 할 수있는 방법을 보여줍니다.

+0

감사합니다. 따라서 여기서 일어나는 일을 요약 할 수 있다면 : –

+0

고마워요. 따라서 여기서 일어나는 일을 요약하면 다음과 같습니다 : my_log (x) 함수는 'tryCatch'유형의 코드 조각에서 호출 된 경우 호출 함수 (또는 콘솔)에 표시 될 사용자 정의 조건을 만듭니다. 그러나 'tryCatch'함수에서 'my_log'함수를 호출하면 'tryCatch'코드가이를 처리하는 방법을 결정합니다. tryCatch는 오류 및 경고를 처리하는 방법을 결정할 수 있지만 코드를 수정하지 않고 조건을 로깅하는 것이 더 적합하므로 코드가 더 심각한 버그를 놓칠 수 있습니다. –

+0

@RobertEdwardArbon, 대부분 그렇습니다. 이 코드는 로깅 이상의 기능을 수행 할 수 있지만 상황에 영향을 미치는 조건을 엄격하게 문서화하지 않으면 로그 이외에 다른 작업과 함께 로깅해야합니다. – BrodieG