Ale*_*lex 3 scope r function global-variables environment-variables
我有一个函数需要访问其父环境中的变量(调用该函数的范围).变量在内存方面很大,所以我不希望将值传递给被调用的函数.除了在全局范围内声明变量之外,还有一种标准的方法吗?例如:
g <- function (a, b) { #do stuff}
f <- function(x) {
y <- 3 #but in my program y is very large
g(x, y)
}
Run Code Online (Sandbox Code Playgroud)
我想访问y in g().所以像这样:
g <- function (a) { a+y }
f <- function(x) {
y <- 3 #but in my program y is very large
g(x)
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
谢谢
"在全局范围内声明变量"没有任何优势,在R中甚至可能不可能取决于你的意思.你当然可以使用第二种形式.导致对象的重复副本甚至三重副本的操作是赋值.您需要更详细地描述您要通过代码说明的内容:y <- 3.在仅仅访问位于封闭框架中的名为"y"的对象的函数内通常不需要这样做.
在声明的环境中存储变量有时会提高访问效率,但我的理解是效率是因为使用了哈希表而提高了速度.一个访问环境中的项目的方式与访问列表元素的方式相同:
> evn <- new.env()
> evn$a <- rnorm(100000)
> ls(evn)
[1] "a"
> length(evn$a)
[1] 100000
Run Code Online (Sandbox Code Playgroud)
BigMemory项目可能为此提供便利:http: //www.bigmemory.org/.它和Lumley的biglm可能有助于评论中提到的大数据集.