[R-pkg-devel] modification of warning messages

Aaron King kingaa at umich.edu
Thu Jun 23 04:02:31 CEST 2016


Perfect!  Thanks!

A.

On Wed, Jun 22, 2016 at 7:29 PM, Hadley Wickham <h.wickham at gmail.com> wrote:

> 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 mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>
>
>
> --
> http://hadley.nz
>



-- 
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]]



More information about the R-package-devel mailing list