Renjin:如何清除上下文?

Renjin: How to clear context?

据我了解,Renjin 上下文包含变量及其值。

假设,我调用了一次:

engine.eval("df <- data.frame(x=1:10, y=(1:10)+rnorm(n=10))");
engine.eval("print(df)");
engine.eval("print(lm(y ~ x, df))");

如何清除上下文以便在清除上下文后调用 engine.eval("print(df)"); 产生关于未知变量的异常?

我想在不混合上下文和重新创建引擎的情况下评估不同的计算。

你说的"context"我觉得是R全局环境。 RenjinScriptEngine 的每个实例都有自己独立的全局环境。

您可以使用 R 基本函数检查、修改和清除在全局环境中设置的值,如下所示:

engine.eval("print(ls())");  // print all symbols in the global environment
engine.eval("rm(ls())");     // remove all symbols in the global environment 
                             // (that don't start with a "." )

engine.eval("rm(ls(all.names=TRUE))"); // remove everything

您也可以使用 javax.script API 来做同样的事情:

engine.getBindings(ScriptContext.ENGINE).clear();

根据您的用例,清除全局环境可能就足够了,但请记住,RenjinScriptEngine 包含额外的状态。

如果您通过 library()require()mypackage::fun() 加载包 and/or 它们的命名空间,这将影响 RenjinScriptEngine 的内部状态。

其他影响会话级(RenjinScriptEngine)状态的事情:

  • 通过options()
  • 设置的全局选项
  • 随机数生成器状态和种子
  • 第三方包的内部状态
  • 打开文件和其他连接