Hi all, Using RConsole, it's easy to get data from the database that you can use in an R Command. Like this: (Reference case) irisQuery <- dbGetQuery(conn, "select * from iris") boxM(irisQuery [,-5], irisQuery[,5]) ---- (Actual case this posting is about) Yet, if I'm getting that same (sample IRIS) data, say, in a web service possibly POSTED from a SQL command, that same data might look like this (portion of the included iris data set below). I'm thus not sure how to package the data so R likes it. Example R-included IRIS data from SQL output: 5.1,3.5,1.4,0.2,setosa, 4.9,3,1.4,0.2,setosa, 4.7,3.2,1.3,0.2,setosa, 4.6,3.1,1.5,0.2,setosa, 5,3.6,1.4,0.2,setosa, I've tried various combinations in code to achieve what's simple in RConsole, but I can't get R to accept my structure. - I've tried just including the data in a string. - I've tried wrapping the data with "data" - I've tried wrapping the data with "data.frame" (as below). Here's my latest attempt: String tableRead = "data.frame(5.1,3.5,1.4,0.2,setosa\n" + "4.9,3,1.4,0.2,setosa\n" + "4.7,3.2,1.3,0.2,setosa\n" + "4.6,3.1,1.5,0.2,setosa\n" + "5,3.6,1.4,0.2,setosa)" ; // using parseAndEval below to give me actual error R is sending... REXP rResponseObject = rConnection.parseAndEval("try(eval("+tableRead+"),silent=TRUE)"); if (rResponseObject.inherits("try-error")) { System.out.println("R Serve Eval Exception : "+rResponseObject.asString()); } REXP boxMResult = rConnection.eval("boxM("+ tableRead+ "[,-5]," + tableRead + "[, 5])"); // FAILS << ---- Error in the above case is: Disconnected from the target VM, address: '127.0.0.1:51356', transport: 'socket' org.rosuda.REngine.REngineException: eval failed, request status: R parser: syntax error at org.rosuda.REngine.Rserve.RConnection.parseAndEval(RConnection.java:454) at org.rosuda.REngine.REngine.parseAndEval(REngine.java:108) at net.example.start_r_fromjava.RStatisticsExample.main(RStatisticsExample.java:151) Does the POSTed data need to be in a different format or am I just not framing it correctly? Would appreciate any tips on how to package table data that might come from a SQL Query passed to Java code. Thanks very much in advance, - M Sent from [ProtonMail](https://protonmail.com), Swiss-based encrypted email. [[alternative HTML version deleted]]
I suspect that you are looking for something like: read.csv(textConnection( "5.1,3.5,1.4,0.2,setosa 4.9,3,1.4,0.2,setosa 4.7,3.2,1.3,0.2,setosa 4.6,3.1,1.5,0.2,setosa 5,3.6,1.4,0.2,setosa" ), header = FALSE) HTH, Jan On 25-10-17 12:50, Morkus via R-devel wrote:> Hi all, > > Using RConsole, it's easy to get data from the database that you can use in an R Command. Like this: > > (Reference case) > > irisQuery <- dbGetQuery(conn, "select * from iris") > boxM(irisQuery [,-5], irisQuery[,5]) > > ---- > > (Actual case this posting is about) > > Yet, if I'm getting that same (sample IRIS) data, say, in a web service possibly POSTED from a SQL command, that same data might look like this (portion of the included iris data set below). I'm thus not sure how to package the data so R likes it. > > Example R-included IRIS data from SQL output: > > 5.1,3.5,1.4,0.2,setosa, > 4.9,3,1.4,0.2,setosa, > 4.7,3.2,1.3,0.2,setosa, > 4.6,3.1,1.5,0.2,setosa, > 5,3.6,1.4,0.2,setosa, > > I've tried various combinations in code to achieve what's simple in RConsole, but I can't get R to accept my structure. > > - I've tried just including the data in a string. > - I've tried wrapping the data with "data" > - I've tried wrapping the data with "data.frame" (as below). > > Here's my latest attempt: > > String tableRead = "data.frame(5.1,3.5,1.4,0.2,setosa\n" + > "4.9,3,1.4,0.2,setosa\n" + > "4.7,3.2,1.3,0.2,setosa\n" + > "4.6,3.1,1.5,0.2,setosa\n" + > "5,3.6,1.4,0.2,setosa)" ; > > // using parseAndEval below to give me actual error R is sending... > REXP rResponseObject = rConnection.parseAndEval("try(eval("+tableRead+"),silent=TRUE)"); > if (rResponseObject.inherits("try-error")) > { > System.out.println("R Serve Eval Exception : "+rResponseObject.asString()); > } > REXP boxMResult = rConnection.eval("boxM("+ tableRead+ "[,-5]," + tableRead + "[, 5])"); // FAILS << > > ---- > > Error in the above case is: > > Disconnected from the target VM, address: '127.0.0.1:51356', transport: 'socket' > org.rosuda.REngine.REngineException: eval failed, request status: R parser: syntax error > at org.rosuda.REngine.Rserve.RConnection.parseAndEval(RConnection.java:454) > at org.rosuda.REngine.REngine.parseAndEval(REngine.java:108) > at net.example.start_r_fromjava.RStatisticsExample.main(RStatisticsExample.java:151) > > Does the POSTed data need to be in a different format or am I just not framing it correctly? > > Would appreciate any tips on how to package table data that might come from a SQL Query passed to Java code. > > Thanks very much in advance, > > - M > > Sent from [ProtonMail](https://protonmail.com), Swiss-based encrypted email. > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >
That's amazing! Thank you!!! One follow up question, if that's OK? If, instead of using hard-coded CSV, I read the CSV into a variable first, then it fails again with a parse error. Code below. So, if I read the CSV into a variable, do I need an additional wrapper method? Seems like it should still work. Thanks in advance for your reply. -M String inputIris = "5.1,3.5,1.4,0.2,setosa\n" + "4.9,3,1.4,0.2,setosa\n" + "4.7,3.2,1.3,0.2,setosa\n" + "4.6,3.1,1.5,0.2,setosa\n" + "5,3.6,1.4,0.2,setosa\n" + "5.4,3.9,1.7,0.4,setosa\n" + "4.6,3.4,1.4,0.3,setosa"; REXP irisData =rConnection.eval( "read.csv(textConnection(" + inputIris + "), header = FALSE)"); Sent from [ProtonMail](https://protonmail.com), Swiss-based encrypted email.> -------- Original Message -------- > Subject: Re: [Rd] How to create a table structure in Java code? > Local Time: October 26, 2017 7:45 AM > UTC Time: October 26, 2017 11:45 AM > From: rhelp at eoos.dds.nl > To: r-devel at r-project.org > > I suspect that you are looking for something like: > > read.csv(textConnection( > "5.1,3.5,1.4,0.2,setosa > 4.9,3,1.4,0.2,setosa > 4.7,3.2,1.3,0.2,setosa > 4.6,3.1,1.5,0.2,setosa > 5,3.6,1.4,0.2,setosa" > ), header = FALSE) > > HTH, > Jan > > On 25-10-17 12:50, Morkus via R-devel wrote: > >> Hi all, >> Using RConsole, it's easy to get data from the database that you can use in an R Command. Like this: >> (Reference case) >> irisQuery <- dbGetQuery(conn, "select * from iris") >> boxM(irisQuery [,-5], irisQuery[,5]) >> --------------------------------------------------------------- >> >> (Actual case this posting is about) >> Yet, if I'm getting that same (sample IRIS) data, say, in a web service possibly POSTED from a SQL command, that same data might look like this (portion of the included iris data set below). I'm thus not sure how to package the data so R likes it. >> Example R-included IRIS data from SQL output: >> 5.1,3.5,1.4,0.2,setosa, >> 4.9,3,1.4,0.2,setosa, >> 4.7,3.2,1.3,0.2,setosa, >> 4.6,3.1,1.5,0.2,setosa, >> 5,3.6,1.4,0.2,setosa, >> I've tried various combinations in code to achieve what's simple in RConsole, but I can't get R to accept my structure. >> >> - I've tried just including the data in a string. >> - I've tried wrapping the data with "data" >> - I've tried wrapping the data with "data.frame" (as below). >> >> Here's my latest attempt: >> String tableRead = "data.frame(5.1,3.5,1.4,0.2,setosa\n" + >> "4.9,3,1.4,0.2,setosa\n" + >> "4.7,3.2,1.3,0.2,setosa\n" + >> "4.6,3.1,1.5,0.2,setosa\n" + >> "5,3.6,1.4,0.2,setosa)" ; >> // using parseAndEval below to give me actual error R is sending... >> REXP rResponseObject = rConnection.parseAndEval("try(eval("+tableRead+"),silent=TRUE)"); >> if (rResponseObject.inherits("try-error")) >> { >> System.out.println("R Serve Eval Exception : "+rResponseObject.asString()); >> } >> REXP boxMResult = rConnection.eval("boxM("+ tableRead+ "[,-5]," + tableRead + "[, 5])"); // FAILS << >> --------------------------------------------------------------- >> >> Error in the above case is: >> Disconnected from the target VM, address: '127.0.0.1:51356', transport: 'socket' >> org.rosuda.REngine.REngineException: eval failed, request status: R parser: syntax error >> at org.rosuda.REngine.Rserve.RConnection.parseAndEval(RConnection.java:454) >> at org.rosuda.REngine.REngine.parseAndEval(REngine.java:108) >> at net.example.start_r_fromjava.RStatisticsExample.main(RStatisticsExample.java:151) >> Does the POSTed data need to be in a different format or am I just not framing it correctly? >> Would appreciate any tips on how to package table data that might come from a SQL Query passed to Java code. >> Thanks very much in advance, >> >> - M >> >> Sent from [ProtonMail](https://protonmail.com), Swiss-based encrypted email. >> [[alternative HTML version deleted]] >> --------------------------------------------------------------- >> >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > --------------------------------------------------------------- > > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel[[alternative HTML version deleted]]