yannrichet/rsession

Issue to laod R script in to remote R process with r.eval()

Closed this issue · 1 comments

Hey, I'm accessing R functions provided by Rserve on a Linux server from Java through Rsession, and I've hack the code of RserverConf.java and RservSession to include a property "tls" to support a SSL connection, it works fine with the old version of Rsession.
But when I try to upgrade to the newest version of Rsession, it doesn't work again with the function rc.eval("source(file_path)") to load R scripts into the remote R process anymore. Here's an example code and it's output below.
I guess there's something wrong with preprocessing of the eval expression string, , any idea? Thanks in advance.

RserveTest.java

package test.jean;

import java.util.Properties;

import org.math.R.RserveSession;
import org.math.R.RserverConf;

public class RserveTest {

	public static void main(String args[]) {
		try {
			Properties prop = new Properties();
			prop.setProperty("tls", "true");
			RserverConf rconf = new RserverConf(host_ip, 6311, "user", "password", prop);
			RserveSession r = (RserveSession)new RserveSession(System.out, null, rconf);
			// create java variable from R command
			double[] rand = (double[]) r.eval("rnorm(10)"); 
			// Try to load source R script into remote R process
			r.eval("source(\"/home/jean/R/testChinese.R\")",false);
                        r.eval("testChinese()");
			System.out.println(r.asString(r.eval("rc$st")));
						
			r.end();
		} catch (Exception e) {
			e.printStackTrace();

		}
	}
}

testChinese.R

testChinese<-function(){
  test<-c("Rserve中文测试。")
  rc<<-list(st=test)
  return(rc)  
}

Console outputs, connection is O.K., and r.eval("rnorm(10)") is run, but fail with r.eval("source("/home/jean/R/testChinese.R")",false),
the line is O.K. in Rstudio.

Will start Rserve session using: R://rserve:rserve@2022@124.223.110.20:6311


[eval] [?] rnorm(10)


[1.1353798479890087, 0.7775232440858648, 1.6027476936447704, 0.9962751826116198, -0.051552560170046106, -1.0327774491148507, 1.267379942526929, -0.7154783097683929, 0.2075579485456512, 1.2805371369512242]
[eval] source("/home/jean/R/testChinese.R")


java.lang.NullPointerException
	at org.math.R.RserveSession.toString(RserveSession.java:1208)
	at org.math.R.RserveSession.toString(RserveSession.java:1187)
	at org.math.R.Rsession.rawEval(Rsession.java:945)
	at org.math.R.Rsession.eval(Rsession.java:1006)
	at test.jean.RserveTest.main(RserveTest.java:19)

It's addressed by loading R source scripts with r.voidEval().

r.voidEval("source(\"/home/jean/R/testChinese.R\")");