我正在使用 renjin,我正在尝试使用我在 java 代码中生成的值和 r 代码,例如:
int x = 7;
try
{
engine.eval("tmp<-c(x, 4)");
engine.eval("print(tmp)");
}
catch (ScriptException ex)
{
;
}
但是,这不起作用,因为引擎显然不能与 x 一起工作。有解决这个问题的简单方法吗?
最佳答案
Renjin 使用 javax.script 接口(interface),为您提供与 R 环境交互的强大功能。请参阅此处的文档: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/
要在 R 的全局环境中设置变量,可以使用 put() 方法。以下是一些示例:
engine.put("x", 4);
engine.put("y", new double[] { 1d, 2d, 3d, 4d });
engine.put("z", new org.renjin.sexp.DoubleArrayVector(1,2,3,4,5));
engine.put("obj", new HashMap());
Renjin 会将基元、基元数组和 java.lang.String 实例隐式转换为 R 对象。 Java 对象将被包装为 R external
对象。
在 R 代码中,Renjin 允许您使用 $
运算符操作 Java 对象,例如:
obj$put("a", 1)
obj$put("b", 2)
print(obj$size())
print(obj$get("b"))
您还可以通过扩展 org.renjin.sexp 包中的类来提供自己的 R 对象实现。例如:
public class MyDoubleVector extends DoubleVector {
public double getElementAsDouble(int index) {
// lookup value in database
return index;
}
public int length() {
// query length in database
return length;
}
}
关于java - Renjin - 如何使用java生成的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18247478/