使用嵌入式R代码运行和调试JAVA程序的结果不同
代码如下:使用嵌入式R代码运行和调试JAVA程序的结果不同,java,r,rserve,Java,R,Rserve,代码如下: RConnection connection = new RConnection(); String load_pkgs = "require(Rserve); require(forecast)"; connection.eval(load_pkgs); String strx1 = "xData = read.table(\"D:\\\\R_TESTS\\\\ts_interval_data21.csv\",sep=\"
RConnection connection = new RConnection();
String load_pkgs = "require(Rserve); require(forecast)";
connection.eval(load_pkgs);
String strx1 = "xData = read.table(\"D:\\\\R_TESTS\\\\ts_interval_data21.csv\",sep=\"|\",header=FALSE,col.names=c(\"a\",\"b\",\"c\",\"d\",\"xData\",\"f\"))[,\"xData\",drop=FALSE]";
connection.eval(strx1);
String strx2 = "x = xData[1:100,1]; fit = auto.arima(x);";
connection.eval(strx2);
String strx3 = "result = forecast(fit,h=12);";
connection.eval(strx3);
Object result = (Object)connection.eval("result").asNativeJavaObject();
HashMap map = (HashMap)result;
List<Object> objects = new ArrayList<Object>(map.keySet());
double values[] = (double[])objects.get(4);
for(int i=0;i<values.length;i++)
{
System.out.println((i+1)+":"+values[i]);
}
RConnection connection=new RConnection();
String load_pkgs=“require(Rserve);require(forecast)”;
连接.评估(荷载/包装);
String strx1=“xData=read.table(\'D:\\\R\\\u TESTS\\\\ts\\\\u interval\u data21.csv\”,sep=\“\”,header=FALSE,col.names=c(\'a\,\'b\,\'c\,\'D\,\'xData\,'f\”)[,“xData\”,drop=FALSE];
连接.eval(strx1);
String strx2=“x=xData[1:100,1];fit=auto.arima(x);”;
连接.eval(strx2);
String strx3=“结果=预测(拟合,h=12);”;
连接。评估(strx3);
Object result=(Object)connection.eval(“result”).asNativeJavaObject();
HashMap=(HashMap)结果;
List objects=newarraylist(map.keySet());
双值[]=(双[])对象。获取(4);
对于(int i=0;i这背后的原因是Java和R存储类型的根本区别。正如您在以下链接中所读到的:此函数“尝试”将R返回类型转换为Java对象类。但此过程并非每次都成功。因此,我建议您不要使用asNativeObject()函数。尝试使用其他函数找到解决方法
您之所以看到这种差异,是因为在调试和运行模式下创建的Java对象在内容和结构上有所不同。谢谢@Brijesh Kumar Sahoo