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/
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 >
Dear John, I have a function in package admisc called tryCatchWEM (catches warnings, errors and messages):> tryCatchWEM(foo())$warning [1] "warning1" "warning2" Hope this helps, Adrian On Thu, 2 Dec 2021 at 23:04, 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 >-- Adrian Dusa University of Bucharest Romanian Social Data Archive Soseaua Panduri nr. 90-92 050663 Bucharest sector 5 Romania https://adriandusa.eu [[alternative HTML version deleted]]