Renjin-如何使用java生成的值

Renjin-如何使用java生成的值,java,r,jri,renjin,Java,R,Jri,Renjin,我使用的是renjin,我尝试将java代码中生成的值与r代码一起使用,例如: int x = 7; try { engine.eval("tmp<-c(x, 4)"); engine.eval("print(tmp)"); } catch (ScriptException ex) { ; } intx=7; 尝试 { eval(“tmp您可以将变量作为文本连接到字符串中,正如我在注释中所发布的: engine.eval("tmp<-c(" + x + ",

我使用的是renjin,我尝试将java代码中生成的值与r代码一起使用,例如:

int x = 7;

try
{
   engine.eval("tmp<-c(x, 4)");
   engine.eval("print(tmp)");
}
catch (ScriptException ex) 
{
   ;
}
intx=7;
尝试
{

eval(“tmp您可以将变量作为文本连接到字符串中,正如我在注释中所发布的:

engine.eval("tmp<-c(" + x + ", 4)");

engine.eval(“tmpRenjin使用javax.script接口,为您提供了与R环境交互的强大功能。请参阅此处的文档:

要在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;
  }
}

可以将x作为文本值连接到字符串中吗?即,
engine.eval("tmpYes很好用,你能把它写下来作为一个答案,这样我就可以投票了。但是,为什么这样做呢?基本上,Java变量
x
和R变量
x
之间是有区别的。如果你只是
eval
一个普通字符串,它的内容被认为是纯R代码,所以
x
将被解释为引用R对象(不存在)。在评估之前,您必须将Java对象的内容插入字符串。这似乎是一个很好的暗中操作,我也不会这么做,因为我没有注意到您可以使用两个加号传递文本表达式。谢谢。真的为我节省了很多工作。没问题,很高兴我能提供帮助
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;
  }
}