更改环境后功能不起作用

Function doesn't work after change its environment

我想呼叫增援来帮助解决这个错误,如下所示:

首先我创建了我的环境:

envizito <- new.env(parent = emptyenv())
attr(envizito, "name") <- "envizito"

并分配了一个名为 aaa 的新变量:

envizito$aaa <- 12

我创建了一个函数:

FUNn <- function() {print(envizito$aaa)}

environment(FUNn)
# <environment: R_GlobalEnv>

然后,我将其环境更改为 envizito

environment(FUNn) <- envizito

environment(FUNn)
# <environment: 0xc20b0a8>
#attr(,"name")
#[1] "envizito"

但在调用 FUNn() 后显示以下错误:

FUNn()
# Error in { : could not find function "{"

PS:虽然environment(FUNn)指向内存中的同一个地方,但当我调用ls()

时它并没有出现
ls(envir = envizito, all.names = TRUE)
# [1] "aaa"

任何意见和建议将不胜感激! 感谢您的关注。

{ 就像 R 中的其他所有不是对象的东西一样,是一个函数。当您创建 envizito 时,您将空环境指定为其父级。空环境,顾名思义,不包含任何对象,即它是空的。

当您将 FUNn 的环境更改为 envisito 时,您将其父环境设为空环境。当您调用 FUNn(函数定义在全局环境中)时,它会在其环境(即 envisito)中搜索函数 {(它在 FUNn 中找到的第一个函数) ).它无法在 envisito 中找到 {,因此它向上查找一个环境。但是,该环境是空的 empty environment 。因此,它失败并显示找不到函数 {.

的错误