Есть функция, у которой есть предупреждения, но она не влияет на конечный результат. Я хочу поймать предупреждение в журнале, подавить предупреждающее сообщение на консоли и вернуть значение.
fn1 <- function() {
warning("this is a warning!")
return(1)
}
Я пробовал withCallingHandlers
, но предупреждающее сообщение все еще распечатывается, а tryCatch
блокирует возврат стоимость. Например, я использую message
, чтобы имитировать сохранение в журнале.
withCallingHandlers(expr = fn1(),
warning = function(w) {
message(paste0("saved to a file: ", w$message))
# write(w$message, "xxlocation")
}
)
вывод
saved to a file: this is a warning!
[1] 1
Warning message:
In fn1() : this is a warning!
Я могу использовать перезапуск, чтобы подавить предупреждение, но мое возвращаемое значение также подавляется . Это очень похоже на tryCatch
:
withCallingHandlers(
withRestarts(fn1(),
mufflewarn=function(msg) {
message(msg)
}),
warning = function(w) {
invokeRestart("mufflewarn", w$message)
}
)
this is a warning!
Есть ли способ получить вывод:
saved to a file: this is a warning!
[1] 1