Renjin会议是折旧的

时间:2017-04-18 10:42:51

标签: java renjin

会话是Renjin不像here所描述的那样是线程安全的,但它是否可以重入?

该场景是从java engine.eval(“...”)调用的,它有一个Java类,它再次调用相同的engine.eval(“..”)方法。我们假设为简单起见,我们只有一个引擎实例。

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。

请注意,通过在原始ScriptEngine实例上调用engine.eval(),将在全局环境中计算表达式,并且R函数无法看到调用Java方法的R调用堆栈。

您还可以要求Renjin在调用时将当前Context传递给您的Java方法。例如:

class MyJavaClass {
   static SEXP estimate(@Current Context context, SEXP function) {
      return context.evaluate(FunctionCall.newCall(function, IntVector.valueOf(42)));
   }
}

然后:

import(MyJavaClass)
f <- function(x) x*2
MyJavaClass$estimate(f)  # 84