サーチ…


パラメーター

パラメータ詳細
expr "try part"が正常に完了した場合、 tryCatch最後に評価された式を返します 。したがって、すべてがうまくいって、条件がない場合(つまり、 警告またはエラー )にreadLines戻り値が返される実際の値が返されます 。あなたが経由状態に戻り値をexpliciltyする必要はないことに注意してくださいreturn 「してみてください一部」にコードとしては、ラップされていません(警告と下記のエラーのための条件ハンドラのそれとは違って)機能環境をinsided
警告/エラー/ etc 明示的に処理するすべての条件に対してハンドラ関数を提供/定義します。 AFAIUでは、それぞれのハンドラ関数の名前がそれぞれの条件のクラスに一致する限り、 あらゆるタイプの条件( 警告エラーだけでなく、 カスタム条件もsimpleConditionsimpleConditionとフレンドを参照)にハンドラを提供できますtryCatchのドキュメントの詳細部分)。
最後に "try part"の式が成功したかどうか、または条件があったかどうかにかかわらず 、最後に実行する必要があるすべてがここにあります。複数の式を実行する場合は、中括弧で囲む必要があります。そうでなければ、 finally = <expression> (つまり、「try part」と同じロジック)と書くことができます。

備考

tryCatch

tryCatchは、条件がない限りexpr実行に関連する値を返します。警告またはエラーです。その場合、それぞれの条件に対応するハンドラ関数を指定することで、特定の戻り値(例: return(NA) )を指定することができます( ?tryCatch引数warningerror参照)。これらはすでに存在する関数ですが、 tryCatch内で定義することもできます(上記のように)。

ハンドラ関数の特定の戻り値を選択することの意義

「試し部分」にエラーがあった場合にNAを返すように指定したので、 yの3番目の要素はNAです。戻り値としてNULLを選択した場合、 lapplyNULL戻り値を単純に「無視/削除」するため、 yの長さは3ではなく2になりNULL 。また、あなたが経由して明示的な戻り値を指定しない場合はご注意return 、ハンドラ関数が返すNULL (すなわち、エラーまたは警告状態の場合)。

「望ましくない」警告メッセージ

私たちの3番目の要素ときurlsベクトルは、当社の機能を打つ、我々は(エラーが発生しているという事実に加えて、次の警告を得るreadLines最初それが実際のエラーで失敗する前に警告を介した接続を開くことができないと文句を言います):

Warning message:
    In file(con, "r") : cannot open file 'I'm no URL': No such file or directory

エラー警告よりも「勝っている」ので、この特定のケースでは警告に本当に関心がありません。したがって、 readLines warn = FALSEを設定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)
}

物事をテストする

1つの要素が有効な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