在 R 中传递大型对象的内存高效方式



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

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

我想在g()访问 y. 所以像这样:

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

这可能吗?

谢谢

"在全局范围内声明变量"没有任何优势,甚至可能在 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可能有助于评论中提到的大型数据集。

相关内容

  • 没有找到相关文章

最新更新