capturing multiple warnings in tryCatch()
Simon's suggestion with withCallingHandlers() is the correct way. Also, note that if you use tryCatch() to catch warnings, you're *interrupting* the evaluation of the expression of interest, e.g.
res <- tryCatch({ message("hey"); warning("boom"); message("there"); 42 }, warning = function(w) { message("Warning caught: ", conditionMessage(w)); 3.14 })
hey Warning caught: boom
res
[1] 3.14 Note how it never completes your expression. /Henrik On Thu, Dec 2, 2021 at 1:14 PM Simon Urbanek
<simon.urbanek at r-project.org> wrote:
Adapted from demo(error.catching):
W=list()
withCallingHandlers(foo(), warning=function(w) { W <<- c(W, list(w)); invokeRestart("muffleWarning") })
str(W)
List of 2 $ :List of 2 ..$ message: chr "warning 1" ..$ call : language foo() ..- attr(*, "class")= chr [1:3] "simpleWarning" "warning" "condition" $ :List of 2 ..$ message: chr "warning 2" ..$ call : language foo() ..- attr(*, "class")= chr [1:3] "simpleWarning" "warning" "condition" Cheers, Simon
On Dec 3, 2021, at 10:02 AM, Fox, John <jfox at mcmaster.ca> wrote: Dear R-devel list members, Is it possible to capture more than one warning message using tryCatch()? The answer may be in ?conditions, but, if it is, I can't locate it. For example, in the following only the first warning message is captured and reported:
foo <- function(){
+ warning("warning 1")
+ warning("warning 2")
+ }
foo()
Warning messages: 1: In foo() : warning 1 2: In foo() : warning 2
bar <- function(){
+ tryCatch(foo(), warning=function(w) print(w)) + }
bar()
<simpleWarning in foo(): warning 1> Is there a way to capture "warning 2" as well? Any help would be appreciated. John -- John Fox, Professor Emeritus McMaster University Hamilton, Ontario, Canada Web: http://socserv.mcmaster.ca/jfox/
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel