我有一个需要在其父环境中调用变量的函数(调用该函数的作用域)。变量在内存方面很大,所以我不希望将值传递给被调用的函数。除了在全局范围内声明变量之外,还有一种标准的方法吗?例如:
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)
}
这可能吗?
由于
答案 0 :(得分: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's biglm可能有助于评论中提到的大型数据集。