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, [EMAIL PROTECTED] > 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