Re: [Rd] Fetching Warning Messages

From: Henrik Bengtsson <hb_at_maths.lth.se>
Date: Tue 23 Aug 2005 - 09:00:29 GMT

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@r-project.org mailing list
>>>https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>>
>>
>>--
>>Brian D. Ripley, ripley@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@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
>

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue Aug 23 19:06:42 2005

This archive was generated by hypermail 2.1.8 : Mon 24 Oct 2005 - 22:27:43 GMT