gpt4 book ai didi

r - 通过引用 id 分配给环境(即不将 env. 传递给子函数)

转载 作者:行者123 更新时间:2023-12-04 09:13:34 26 4
gpt4 key购买 nike

程序员经常在大函数中使用多个小函数。一路上我们可能想收集环境中的东西以供以后引用。我们可以用 new.env(hash=FALSE) 创建一个环境并将其传递给较小的函数并分配给 assign .好吧,花花公子。我想知道我们是否可以使用环境的引用 id 而不是将它传递给子函数,但仍然通过引用环境 id 分配给环境。

所以我在这里做

myenv <- new.env(hash=FALSE)
## <environment: 0x00000000588cc918>

如果我将环境传递给子功能,那么通常可以像这样分配。
assign("elem1", 35, myenv)

myenv[["elem1"]]
# 35

我想要的是在父函数中创建环境并传递引用 id,所以我想做一些类似的事情:
assign("elem2", 123, "0x00000000588cc918")

但可以预见的结果是:
## Error in as.environment(pos) : 
## no item called "0x00000000588cc918" on the search list

是否可以只传递环境 ID 并使用它?这似乎比将环境从一个函数传递到另一个函数并作为列表返回,然后在该列表中的环境上操作更简洁……而且可能也更有效地使用了内存。

我也想通过引用访问这个环境。

最佳答案

环境不像列表。即使环境的内容在函数内被修改,将环境传递给函数也不会复制其内容,因此您不必担心效率低下。此外,当环境传递给修改其内容的函数时,即使在函数完成后,内容也会保留,因此与列表的情况不同,不需要将环境传回。

比如下面的代码通过环境e功能 ff修改它的内容但不传回它。后 f完成调用者看到的变化。

    f <- function(x, env) { 
env$X <- x
TRUE
}

e <- new.env()
f(1, e)
## [1] TRUE

e$X
## [1] 1

Hadely 书中有关环境的更多信息: http://adv-r.had.co.nz/Environments.html

关于r - 通过引用 id 分配给环境(即不将 env. 传递给子函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33171392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com