例如,我使用renjin,并尝试使用在java代码中生成的值和r代码:
int x = 7;
try
{
engine.eval("tmp<-c(x, 4)");
engine.eval("print(tmp)");
}
catch (ScriptException ex)
{
;
}然而,这是行不通的,因为引擎显然不能与x一起工作。有一个简单的方法来解决这个问题吗?
发布于 2013-08-15 06:49:54
您可以将变量作为文字连接到字符串中,正如我在注释中发布的那样:
engine.eval("tmp<-c(" + x + ", 4)");这是因为(我假设)引擎需要计算文字表达式(使用数字值而不是变量),而上面的表达式实质上通过字符串和整数值的连接(组合)来传递tmp<-c(7, 4)。我还会尝试首先运行一个命令来存储一个变量,然后引用它,即:
engine.eval(x <- 7);那就试试你原来的表情。不过,我对仁金并不熟悉,所以这是一种暗箱操作。
发布于 2013-09-06 07:32:47
Renjin使用javax.script接口,为您提供了与R环境交互的大量功能。参见这里的文档: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;
}
}https://stackoverflow.com/questions/18247478
复制相似问题