Careful; tryCatch() on non-error conditions will break out of what's
evaluated, e.g.
res <- tryCatch({
cat("1\n")
message("2")
cat("3\n")
42
}, message = identity)
will output '1' but not '3', because it returns as soon as the first
message() is called.
To "record" messages (same for warnings), use withCallingHandlers()
instead, e.g.
msgs <- list()
res <- withCallingHandlers({
cat("1\n")
message("2")
cat("3\n")
42
}, message = function(m) {
msgs <<- c(msgs, list(m))
invokeRestart("muffleMessage")
})
This will output '1', muffle '2', output '3', and return 42, and 'msgs'
holds
[[1]]
<simpleMessage in message("2"): 2
/Henrik
On Tue, Nov 28, 2023 at 10:34?AM Bill Dunlap <williamwdunlap at gmail.com>
wrote:
If you would like to save the error message instead of suppressing it,
can use tryCatch(message=function(e)e, ...).
-BIll
On Tue, Nov 28, 2023 at 3:55?AM Adrian Dusa <dusa.adrian at unibuc.ro>
Once again, Ivan, many thanks.
Yes, that does solve it.
Best wishes,
Adrian
On Tue, Nov 28, 2023 at 11:28?AM Ivan Krylov <krylov.r00t at gmail.com>
wrote:
? Tue, 28 Nov 2023 10:46:45 +0100
Adrian Dusa <dusa.adrian at unibuc.ro> ?????:
tryCatch(requireNamespace("foobar"), error = function(e) e)
I think you meant loadNamespace() (which throws errors), not
requireNamespace() (which internally uses
tryCatch(loadNamespace(...))
and may or may not print the error depending on the `quietly`
[[alternative HTML version deleted]]