R 中的环境扩展

Environment expansion in R

我有一些不知道如何解决的问题。 Prehistory:我使用 R.NET 进行计算(需要 WPF 应用程序)。因此,我想并行化我的应用程序,并为 REngine class 创建了动态代理。它需要序列化数据以通过 TCP 从 REngine 实例传递和接收数据。坏消息 - R.NET classes 无法序列化。所以,我有了一个想法,在 R 中序列化 R 对象,并在进程之间传递 R 序列化数据。

所以我有这样的相同脚本:

a <- 5;
b <- 10;
x <- a+b;

我需要这样包装:

wrapFunction <- function()
{
    a <- 5;
    b <- 10;
    x <- a+b;
}

serializedResult <- serialize(wrapFunction());

我将获取 serializedResult 并将其作为字节数组传递。我还需要通过环境。但是在这些操作之后,我不会在 .GlobalEnv 中得到 a、b、x。 如何在我的 .GlobalEnv 中获取函数体中定义的所有变量? 我不知道名字和计数,我无法重写基本脚本,将“<-”替换为“<<-”。 其他方式?

谢谢。

我不确定我是否完全理解您的要求。它们似乎违背了 R 试图遵循的函数式语言范式。以下内容可能有用或无用:

e <- new.env()
wrapFunction <- function(){
  with(e, {
         a <- 5;
         b <- 10;
         x <- a+b;
          })
}

wrapFunction()
e$a
#[1] 5

你当然可以使用 .GlobalEnv 而不是 e,但至少在 R 中这会被认为是更糟糕的做法。