传递大的物体中的R的存储器高效的方式(memory efficient way of passing

2019-09-18 11:55发布

我需要在它的父环境(范围从该函数被调用)来访问变量的函数。 该变量是在内存方面大的,所以我宁愿不被调用的函数将它按值传递给。 难道还有比在全球范围内声明变量这样做其他的标准方法? 例如:

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

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

我想在访问Ÿ g() 因此,像这样:

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

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

这可能吗?

谢谢

Answer 1:

有没有优势“宣布在全球范围内的变量”,它甚至有可能不会是可能的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/ 。 它和拉姆利的biglm可以帮助在评论中提到的大数据集。



文章来源: memory efficient way of passing large objects in R