From ripley at stats.ox.ac.uk  Mon Aug 22 17:53:42 2005
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Mon, 22 Aug 2005 16:53:42 +0100 (BST)
Subject: [Rd] Fetching Warning Messages
In-Reply-To: <003301c5a72d$f1badf50$7900a8c0@dca.com>
References: <003301c5a72d$f1badf50$7900a8c0@dca.com>
Message-ID: <Pine.LNX.4.61.0508221634470.16868@gannet.stats>

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.

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



[Rd] Fetching Warning Messages
Prof Brian Ripley