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 中这会被认为是更糟糕的做法。
我有一些不知道如何解决的问题。 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 中这会被认为是更糟糕的做法。