[Rd] Fetching Warning Messages

Henrik Bengtsson hb at maths.lth.se
Tue Aug 23 11:00:29 CEST 2005


Did you get my reply to you on Aug 13 on withCallingHandlers()?

  https://stat.ethz.ch/pipermail/r-devel/2005-August/034189.html

/Henrik


Nikhil Shah wrote:
> Hi,
> 
>     I read the help page and saw that warnings() actually prints the warning
> message and stores warning in top-level variable "last.warning". So it seems
> that it is almost impossible to access last warning from java code. I got
> another solution of fetching warning messages by storing warning messages in
> a file and reading the file later. This can be done by using sink() command,
> but before that options(warn=1) must be set.
> 
> 
>>Please read the help page on options("warn") and see what warnings()
>>does. (I am pretty sure you have asked this and been told before.)
>>
>>There should not be an object called last.warning in your example.
>>
> 
> 
>     I read help page
> 
> 
>>On Mon, 22 Aug 2005, Nikhil Shah wrote:
>>
>>
>>>Hi,
>>>
>>>   I am facing one problem of fetching R warning messages in Java Code
>>>using Rserve. It is easier to trap R Error messages by using catching
>>>RSrvException. I came to know one way of fetching R Warning messages,
> 
> i.e.
> 
>>>using "withCallingHandlers", below is my Java Program, which uses
>>>withCallingHandlers of R :
>>>import org.rosuda.JRclient.*;
>>>
>>>---------------------------RWarning.java-----------------------
>>>class RWarning
>>>{
>>>  public static void main(String args[])
>>> {
>>>    try
>>>    {
>>>      String hostName = null;
>>>      hostName = args[0];
>>>      Rconnection c = new Rconnection(hostName);
>>>      c.voidEval("lastWarning <- NULL");
>>>      c.voidEval("withCallingHandlers(
>>>{x<-sqrt(-9);y<-matrix(1:9,ncol=4);z<-sqrt(4)} , warning = function (w)
> 
> {
> 
>>>lastWarning <<- paste(lastWarning,as.character(w))})"); //This will
> 
> generate
> 
>>>warning message[sqrt(-9)], another warning message [
> 
> matrix(1:9,ncol=4) ]
> 
>>>and successful completion [ sqrt(4) ]
>>>       System.out.println(c.eval("z").asDouble());
>>>       System.out.println(c.eval("lastWarning").asString());
>>>       c.close();
>>>       System.out.println("DONE");
>>>     }
>>>     catch(RSrvException  e)
>>>     {
>>>        System.out.println("Error : " + e.getMessage());
>>>        e.printStackTrace();
>>>     }
>>>  }
>>>}
>>>---------------------------End Of RWarning.java-----------------------
>>>
>>>Output of above program is (as expected) :
>>>
>>>2.0
>>>simpleWarning in sqrt(-9): NaNs produced
>>>simpleWarning: data length [9] is not a sub-multiple or multiple of the
>>>number of columns [4] in matrix
>>>
>>>DONE
>>>
>>>
>>>
>>>    Now my query is that if there is any way of using warnings()
> 
> function
> 
>>>in Java Program to fetch all warnings. I used it in my program but
> 
> returns
> 
>>>me NULL instead of warning messages. I also used last.warning but it
> 
> Java
> 
>>>Program gives an error saying that last.warning object is not found. I
> 
> have
> 
>>>pasted both the java code below :
>>>
>>>This is the java program that I have written to use "last.warning"
> 
> object of
> 
>>>R. Please explain me where the error could be.
>>>
>>>------------Code of RWarning1.java----------------
>>>
>>>import org.rosuda.JRclient.*;
>>>
>>>class RWarning1
>>>{
>>> public static void main(String args[])
>>> {
>>>   try
>>>   {
>>>     String hostName = null;
>>>     hostName = args[0];
>>>     Rconnection c = new Rconnection(hostName);
>>>     System.out.println(c.eval("x<-sqrt(-9)").asString());
>>>     System.out.println(c.eval("last.warning").asString());
>>>     c.close();
>>>     System.out.println("DONE");
>>>   }
>>>   catch(RSrvException  e)
>>>   {
>>>     System.out.println("Error : " + e.getMessage());
>>>     e.printStackTrace();
>>>   }
>>> }
>>>}
>>>------------End of code of RWarning1.java------------------
>>>
>>>output of RWarning1.class
>>>
>>>null
>>>Error : Request return code: 127 [request status: Error (127)]
>>>org.rosuda.JRclient.RSrvException: Request return code: 127 [request
> 
> status:
> 
>>>Err
>>>or (127)]
>>>       at org.rosuda.JRclient.Rconnection.eval(Rconnection.java:190)
>>>       at RWarning.main(RWarning.java:13)
>>>
>>>In other words, when I use "last.warning" in eval method, I simply get
> 
> an
> 
>>>exception, instead of value of last.warning.
>>>
>>>
>>>Below is the java code of using warnings() function.
>>>
>>>------------Code of RWarning2.java----------------
>>>
>>>import org.rosuda.JRclient.*;
>>>
>>>class RWarning2
>>>{
>>> public static void main(String args[])
>>> {
>>> try
>>> {
>>>   String hostName = null;
>>>   hostName = args[0];
>>>   Rconnection c = new Rconnection(hostName);
>>>   System.out.println(c.eval("x<-sqrt(-9)").asString());
>>>
>>>
> 
> System.out.println(c.eval("paste(capture.output(warnings()),collapse='\n')")
> 
>>>.asString());
>>>   c.close();
>>>   System.out.println("DONE");
>>> }
>>> catch(RSrvException  e)
>>> {
>>>   System.out.println("Error : " + e.getMessage());
>>>   e.printStackTrace();
>>> }
>>>}
>>>}
>>>------------End of code of RWarning2.java------------------
>>>output of RWarning2.class
>>>
>>>null
>>>NULL
>>>DONE
>>>
>>>
>>> Please let me know where I am making mistake.
>>>
>>>Regards,
>>>
>>>Nikhil Shah
>>>
>>>______________________________________________
>>>R-devel at r-project.org mailing list
>>>https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>>
>>
>>-- 
>>Brian D. Ripley,                  ripley at stats.ox.ac.uk
>>Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
>>University of Oxford,             Tel:  +44 1865 272861 (self)
>>1 South Parks Road,                     +44 1865 272866 (PA)
>>Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>>
> 
> 
> Regards,
> 
> Nikhil Shah
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
>



More information about the R-devel mailing list