I'm using renjin and I'm trying to use values I generated in the java code with the r-code, for instance:
int x = 7;
try
{
engine.eval("tmp<-c(x, 4)");
engine.eval("print(tmp)");
}
catch (ScriptException ex)
{
;
}
However, this does not work, as the engine apparently cannot work with x. Is there an easy way to solve this?
Renjin uses the javax.script interface, for which gives you a lot of power to interact with the R environment. See the documentation here: http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/
To set variables within R's global environment, you can use the put() method. Here are some examples:
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 will implicitly convert primitives, arrays of primitives, and java.lang.String instances to R objects. Java objects will be wrapped as R external
objects.
From R code, Renjin allows you to manipulate Java objects using the $
operator, for example:
obj$put("a", 1)
obj$put("b", 2)
print(obj$size())
print(obj$get("b"))
You can also provide your own implementations of R objects by extending the classes in the org.renjin.sexp package. For example:
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;
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With