수색…


매개 변수

매개 변수 세부
expr "try part"가 성공적으로 완료되면 tryCatch마지막으로 평가 된 표현식을 반환합니다. 따라서 모든 것이 잘되고 예외가없는 경우 (즉, 경고 또는 오류 ) readLines 의 반환 값은 실제 값이 반환됩니다. 당신이를 통해 상태를 반환 값을 explicilty 할 필요는 없습니다 return 은 "시도 할 부분"코드로 (경고 및 오류가 아래의 조건 핸들러는 달리) 함수 환경을 insided 포장되지 않은
경고 / 오류 / 기타 명시 적으로 처리하려는 모든 조건에 대한 처리기 함수를 제공하거나 정의하십시오. AFAIU, 각각의 핸들러 함수이름이 각각의 조건의 클래스와 일치하는 한 모든 유형의 조건 ( 경고오류 뿐만 아니라 사용자 정의 조건뿐만 아니라 simpleCondition 조건 및 친구들 참조)에 대한 핸들러를 제공 할 수 있습니다 tryCatch 에 대한 문서의 세부 정보 부분).
마침내 여기에 "try part"의 표현이 성공했는지 또는 어떤 조건이 있었는지에 관계없이 맨 마지막에서 실행해야하는 모든 것이 있습니다. 둘 이상의 표현식을 실행하려면 중괄호로 묶어야합니다. 그렇지 않으면 finally = <expression> ( "try part"와 같은 논리)을 작성할 수 있습니다.

비고

tryCatch

tryCatch 는 조건이 없으면 expr 실행과 관련된 값을 반환합니다. 경고 또는 오류입니다. 만약, 특정 리턴 값 (예, return(NA) 상기 ()는 인수 참조 각 조건 핸들러 함수를 공급함으로써 지정 될 수 warningerror?tryCatch ). 이미 존재하는 함수가 될 수 있지만 tryCatch 내에서 정의 할 수도 있습니다 (앞에서와 같이).

핸들러 함수의 특정 반환 값 선택시 의미

"try part"에 오류가있을 경우 NA 를 반환하도록 지정 했으므로 y 의 세 번째 요소는 NA 입니다. 우리가 반환 값으로 NULL 을 선택 lapplyNULL 반환 값을 "무시 / 삭제"하기 때문에 y 의 길이는 3 대신 2NULL . 또한이를 통해 명시 적으로 반환 값을 지정하지 않을 경우주의 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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow