[R-pkg-devel] modification of warning messages
Hadley Wickham
h.wickham at gmail.com
Thu Jun 23 01:29:52 CEST 2016
Try warningcall(R_NilValue, "message")
Hadley
On Wednesday, June 22, 2016, Aaron King <kingaa at umich.edu> wrote:
> I am in the midst of trying to improve error and warning messages in a
> complex package. I find myself wanting to modify R's default behavior when
> printing warnings. Specifically, it frequently happens for me that the
> call that is printed with the warning message is not informative. When the
> warning arises in R code, I have the ability to suppress the printing of
> the call by setting 'call.=FALSE'. However, when the warning arises in C
> code (via the 'warning()' function), I have no such option.
>
> 'tryCatch' and 'withCallingHandlers' are of no use (or at least, if they
> are, I haven't figured out how).
>
> Consider the following simple example:
>
> Contents of file 'example.c':
> --------------------------------------------------
> #include <R.h>
>
> void example (int *x) {
> if (*x>0)
> error("ouch");
> else if (*x<0) {
> warning("duck!");
> *x = 22;
> } else {
> *x = 11;
> }
> }
> --------------------------------------------------
>
> Compile and load the C code:
> --------------------------------------------------
> system2(R.home("bin/R"),args=c("CMD","SHLIB","example.c"))
> dyn.load(paste0("example",.Platform$dynlib.ext))
> --------------------------------------------------
>
> The function 'f' calls 'example' as defined above. On an error, it
> modifies the error message using 'tryCatch'.
> --------------------------------------------------
> f <- function (x) {
> y <- tryCatch(
> .C("example",x=as.integer(x))$x,
> error = function (e) {
> stop("in f: ",conditionMessage(e),call.=FALSE)
> }
> )
> y
> }
> --------------------------------------------------
>
> Get an error:
>
> > f(1)
> Error: in f: ouch!
>
> Get a warning:
>
> > f(-1)
> [1] 22
> Warning message:
> In doTryCatch(return(expr), name, parentenv, handler) : duck!
>
> It's the fact that 'doTryCatch(return(expr), name, parentenv, handler)' is
> meaningless to the user that bothers me. How can I modify the warning?
>
> Thanks in advance for any insight.
>
> --
> Professor Aaron A. King
> Ecology & Evolutionary Biology
> Mathematics
> Center for the Study of Complex Systems
> University of Michigan
> GPG Public Key: 0x15780975
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-package-devel at r-project.org <javascript:;> mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>
--
http://hadley.nz
[[alternative HTML version deleted]]
More information about the R-package-devel
mailing list