我想发出警告并仍然运行表达式。
这里是一个例子:
x <- 0
tryCatch({
x <- as.numeric("text") # this is NA and causes warning
}, warning = function(w) {
print("I am a message")
})
x
# x still 0
先前的代码捕获到警告并打印消息,但是x的值之后不等于NA,这意味着表达式由于警告而没有运行。
我可以使用suppressWarnings()
和<<-
来运行表达式,如下所示:
x <- 0
tryCatch({
x <- as.numeric("text")
}, warning = function(w) {
print("I am a message")
suppressWarnings(x <<- as.numeric("text"))
})
x
# now x is NA
是否有更优雅的方法?也许是以下示例之一?
tryCatch()
之外的另一个功能tryCatch()
的某些参数答案 0 :(得分:0)
从this answer开始,该代码可以工作:
x <- 0
withCallingHandlers({
x <- as.numeric("text")
}, warning = function(w) {
print("I am a message")
invokeRestart("muffleWarning")
})
x
((我碰到这篇文章,是在寻找警告并更改函数返回值的方法。最后我找到了
which_nondefault_enc <- function(txt) {
ans <- rep(NA, length(txt))
for (i in seq(1, length(txt)))
ans[i] <- tryCatch(stringi::stri_enc_tonative(txt[i]), warning = function(w) return(NA))
return(which(is.na(ans)))
}
返回向量的那些索引,其中将诸如“无法将''转换为本地编码”之类的警告用作选择标准。)