Perfect! Thanks! A.
On Wed, Jun 22, 2016 at 7:29 PM, Hadley Wickham <h.wick...@gmail.com> wrote: > Try warningcall(R_NilValue, "message") > > Hadley > > > On Wednesday, June 22, 2016, Aaron King <kin...@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@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]] ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel