【发布时间】:2015-09-03 10:55:15
【问题描述】:
我是 R 编程新手。我创建了一个简单的 R 脚本并尝试使用 JAVA 类运行它,但我无法做到。
我尝试过使用 Rserve 和 rJava。使用 Rserve,代码执行在创建“RConnection”实例后停止,而使用 rJava 时出现异常“java.lang.UnsatisfiedLinkError:jri.dll:找不到依赖库”。
JAVA类代码如下:
对于 rJava:
import org.rosuda.JRI.Rengine;
public class Temp {
public static void main(String a[]) {
// Create an R vector in the form of a string.
String javaVector = "c(1,2,3,4,5)";
// Start Rengine.
Rengine engine = new Rengine(new String[] { "--no-save" }, false, null);
// The vector that was created in JAVA context is stored in 'rVector' which is a variable in R context.
engine.eval("rVector=" + javaVector);
//Calculate MEAN of vector using R syntax.
engine.eval("meanVal=mean(rVector)");
//Retrieve MEAN value
double mean = engine.eval("meanVal").asDouble();
//Print output values
System.out.println("Mean of given vector is=" + mean);
}
}
预留:
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;
public class Temp {
public static void main(String a[]) {
RConnection connection = null;
System.out.println("line 10");
try {
// Create a connection to Rserve instance running on default port 6311
System.out.println("line 15");
connection = new RConnection();
System.out.println("line 17");
//Note four slashes (\\\\) in the path
connection.eval("source('D:\\\\RExamples\\\\helloworld.R')");
System.out.println("line 19");
int num1=10;
int num2=20;
int sum=connection.eval("myAdd("+num1+","+num2+")").asInteger();
System.out.println("The sum is=" + sum);
} catch (RserveException e) {
e.printStackTrace();
} catch (REXPMismatchException e) {
e.printStackTrace();
}
}
}
如果您不清楚我的问题或您想了解其他任何信息,请告诉我。提前致谢。
【问题讨论】:
-
你是如何配置你的 RConnection() 的?听起来您需要调查配置。也许在 RConnection() 构造函数中放置一个断点来验证连接。
-
你也可以告诉我一些其他的方式。我从 Google 获得了此代码。