我正在使用renjin,我正在尝试使用我在java代码中使用r代码生成的值,例如:
int x = 7;
try
{
engine.eval("tmp<-c(x, 4)");
engine.eval("print(tmp)");
}
catch (ScriptException ex)
{
;
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为引擎显然无法使用x.有没有简单的方法来解决这个问题?
Renjin使用javax.script接口,为您提供与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());
Run Code Online (Sandbox Code Playgroud)
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"))
Run Code Online (Sandbox Code Playgroud)
您还可以通过扩展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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1275 次 |
| 最近记录: |