我遇到问题: 我正在运行一个循环来处理多个文件。我的矩阵是巨大的,因此如果我不小心的话,我经常会记忆犹新。当“警告()”出现在R中时出现断路
如果有任何警告被创建,有没有办法摆脱循环?它只是继续运行循环,并报告说,它失败了很多晚...烦人。任何想法哦智慧stackoverflow-ers?!
我遇到问题: 我正在运行一个循环来处理多个文件。我的矩阵是巨大的,因此如果我不小心的话,我经常会记忆犹新。当“警告()”出现在R中时出现断路
如果有任何警告被创建,有没有办法摆脱循环?它只是继续运行循环,并报告说,它失败了很多晚...烦人。任何想法哦智慧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
设置全局warn
选项:
options(warn=1) # print warnings as they occur
options(warn=2) # treat warnings as errors
注意, “警告” 不是一个 “错误”。循环不会因警告而终止(除非options(warn=2)
)。
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
+1 - 非常好。我曾经想过提及这个选项,但是不可能把这样一个简短但甜美的教程放在一起。 –
有一个很好的'for'的演示会更好:) –
之后,使用'选项(警告= 1)'恢复默认设置。 –
虽然默认值是0。所以要恢复_factory设置_使用'选项(“warn”= 0)'。 –