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()
设置的全局选项
- 随机数生成器状态和种子
- 第三方包的内部状态
- 打开文件和其他连接
据我了解,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()
设置的全局选项
- 随机数生成器状态和种子
- 第三方包的内部状态
- 打开文件和其他连接