3

我有一个函数需要访问其父环境中的变量(调用函数的范围)。该变量在内存方面很大,因此我不希望将其按值传递给被调用的函数。除了在全局范围内声明变量之外,还有其他标准方法吗?例如:

g <- function (a, b) { #do stuff}

f <- function(x) {
    y <- 3 #but in my program y is very large
    g(x, y)
}

我想访问 y in g()。所以是这样的:

g <- function (a) { a+y }

f <- function(x) {
    y <- 3 #but in my program y is very large
    g(x)
}

这可能吗?

谢谢

4

1 回答 1

7

“在全局范围内声明变量”没有任何优势,根据你的意思,它甚至可能在 R 中是不可能的。你当然可以使用第二种形式。导致对象重复甚至三次复制的动作是赋值。您将需要更详细地描述您试图通过代码说明的内容:y <- 3. 在仅访问位于封闭框架中的名为“y”的对象的函数中,通常不需要这样做。

在声明的环境中存储变量有时会提高访问效率,但我的理解是效率是在提高速度方面,因为使用了哈希表。访问环境中的项目的方式与访问列表元素的方式相同:

> evn <- new.env()
> evn$a <- rnorm(100000)
> ls(evn)
[1] "a"
> length(evn$a)
[1] 100000

BigMemory 项目可能会为此提供便利:http: //www.bigmemory.org/。它和Lumley 的 biglm可能对评论中提到的大型数据集有所帮助。

于 2012-06-25T19:40:55.413 回答