問題が発生しています:ループを実行して複数のファイルを処理しています。私のマトリックスは膨大であるため、注意を怠るとメモリ不足になることがよくあります。
警告が作成された場合にループから抜け出す方法はありますか?ループを実行し続け、ずっと後に失敗したことを報告します...迷惑です。賢いstackoverflow-ersのアイデアはありますか?!
次の方法で警告をエラーに変えることができます。
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
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
グローバルwarn
オプションを設定します。
_options(warn=1) # print warnings as they occur
options(warn=2) # treat warnings as errors
_
「警告」は「エラー」ではないことに注意してください。ループは警告のために終了しません(options(warn=2)
でない限り)。