我有一个函数,需要访问其父环境(调用函数的作用域)中的变量。 该变量在内存方面很大,因此我不希望将其按值传递给被调用的函数。 除了在全局范围内声明变量之外,是否有其他标准方法可以执行此操作? 例如:
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可能有助于评论中提到的大型数据集。