回答:
警告はエラーに変えることができます:
options(warn=2)
警告とは異なり、エラーはループを中断します。Rはまた、これらの特定のエラーが警告から変換されたことを報告します。
j <- function() {
for (i in 1:3) {
cat(i, "\n")
as.numeric(c("1", "NA"))
}}
# warn = 0 (default) -- warnings as warnings!
j()
# 1
# 2
# 3
# Warning messages:
# 1: NAs introduced by coercion
# 2: NAs introduced by coercion
# 3: NAs introduced by coercion
# warn = 2 -- warnings as errors
options(warn=2)
j()
# 1
# Error: (converted from warning) NAs introduced by coercion
options("warn"=0)
。
op=options(warn=2)
、2)処理を行い、3)でリセットすることで最も適切に処理されます。これoptions(op)
によりwarn=0
、この場合に戻ります。
Rでは条件ハンドラーを定義できます
x <- tryCatch({
warning("oops")
}, warning=function(w) {
## do something about the warning, maybe return 'NA'
message("handling warning: ", conditionMessage(w))
NA
})
その結果
handling warning: oops
> x
[1] NA
tryCatchの後も実行は継続されます。警告をエラーに変換して終了することもできます
x <- tryCatch({
warning("oops")
}, warning=function(w) {
stop("converted from warning: ", conditionMessage(w))
})
または状態を適切に処理します(警告呼び出しの後も評価を継続します)
withCallingHandlers({
warning("oops")
1
}, warning=function(w) {
message("handled warning: ", conditionMessage(w))
invokeRestart("muffleWarning")
})
印刷する
handled warning: oops
[1] 1
for
:)でも良いだろう
グローバルwarn
オプションを設定します。
options(warn=1) # print warnings as they occur
options(warn=2) # treat warnings as errors
「警告」は「エラー」ではないことに注意してください。ループは警告のために終了しません(でない限りoptions(warn=2)
)。
options(warn=1)
してデフォルト設定を復元します。