[Rd] [External] REprintf could be caught by tryCatch(message)
Jan Gorecki
j@goreck| @end|ng |rom w|t@edu@p|
Mon Sep 16 12:34:56 CEST 2019
Thank you Luke,
I filled https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17612
Best,
Jan
On Mon, Sep 16, 2019 at 2:15 AM Tierney, Luke <luke-tierney using uiowa.edu> wrote:
>
> You can file it as a wishlist item in the bug trackign system. Without
> a compelling case or a complete and well tested patch or both I doubt
> it will rise to the top of anyone's priority list.
>
> Best,
>
> luke
>
> On Sun, 15 Sep 2019, Jan Gorecki wrote:
>
> > Thank you Luke for prompt reply.
> > Is it possible then to request a new function to R C API "message"
> > that would equivalent to R "message" function? Similarly as we now
> > have C "warning" and C "error" functions.
> >
> > Best,
> > Jan
> >
> > On Sun, Sep 15, 2019 at 5:25 PM Tierney, Luke <luke-tierney using uiowa.edu> wrote:
> >>
> >> On Sun, 15 Sep 2019, Jan Gorecki wrote:
> >>
> >>> Dear R-devel community,
> >>>
> >>> There appears to be an inconsistency in R C API about the exceptions
> >>> that can be raised from C code.
> >>> Mapping of R C funs to corresponding R functions is as follows.
> >>>
> >>> error -> stop
> >>> warning -> warning
> >>> REprintf -> message
> >>
> >> This is wrong: REpintf is like cat with file = stderr(). If this claim
> >> is made somewhere in R documentation please report it a a bug.
> >>
> >>> Rprintf -> cat
> >>>
> >>> Rprint/cat is of course not an exception, I listed it just for completeness.
> >>> The inconsistency I would like to report is about REprintf. It cannot
> >>> be caught by tryCatch(message). Warnings are errors are being caught
> >>> as expected.
> >>>
> >>> Is there any chance to "fix"/"improve" REprintf so tryCatch(message)
> >>> can catch it?
> >>
> >> No: this is behaving as intended.
> >>
> >> Best,
> >>
> >> luke
> >>
> >>> So in the example below catch(Cmessage()) would behave consistently to
> >>> R's catch(message("a"))?
> >>>
> >>> Regards,
> >>> Jan Gorecki
> >>>
> >>> catch = function(expr) {
> >>> tryCatch(expr,
> >>> message=function(m) cat("caught message\n"),
> >>> warning=function(w) cat("caught warning\n"),
> >>> error=function(e) cat("caught error\n")
> >>> )
> >>> }
> >>> library(inline)
> >>> Cstop = cfunction(c(), 'error("%s\\n","a"); return R_NilValue;')
> >>> Cwarning = cfunction(c(), 'warning("%s\\n","a"); return R_NilValue;')
> >>> Cmessage = cfunction(c(), 'REprintf("%s\\n","a"); return R_NilValue;')
> >>>
> >>> catch(stop("a"))
> >>> #caught error
> >>> catch(warning("a"))
> >>> #caught warning
> >>> catch(message("a"))
> >>> #caught message
> >>>
> >>> catch(Cstop())
> >>> #caught error
> >>> catch(Cwarning())
> >>> #caught warning
> >>> catch(Cmessage())
> >>> #a
> >>> #NULL
> >>>
> >>> ______________________________________________
> >>> R-devel using r-project.org mailing list
> >>> https://stat.ethz.ch/mailman/listinfo/r-devel
> >>>
> >>
> >> --
> >> Luke Tierney
> >> Ralph E. Wareham Professor of Mathematical Sciences
> >> University of Iowa Phone: 319-335-3386
> >> Department of Statistics and Fax: 319-335-3017
> >> Actuarial Science
> >> 241 Schaeffer Hall email: luke-tierney using uiowa.edu
> >> Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
> >
>
> --
> Luke Tierney
> Ralph E. Wareham Professor of Mathematical Sciences
> University of Iowa Phone: 319-335-3386
> Department of Statistics and Fax: 319-335-3017
> Actuarial Science
> 241 Schaeffer Hall email: luke-tierney using uiowa.edu
> Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
More information about the R-devel
mailing list