更改其环境后,功能不起作用

Fáb*_*bio 2 environment r function

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

首先我创建了我的环境:

envizito <- new.env(parent = emptyenv())
attr(envizito, "name") <- "envizito"
Run Code Online (Sandbox Code Playgroud)

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

envizito$aaa <- 12
Run Code Online (Sandbox Code Playgroud)

我创建了一个函数:

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

environment(FUNn)
# <environment: R_GlobalEnv>
Run Code Online (Sandbox Code Playgroud)

然后,我改变了它的环境envizito:

environment(FUNn) <- envizito

environment(FUNn)
# <environment: 0xc20b0a8>
#attr(,"name")
#[1] "envizito"
Run Code Online (Sandbox Code Playgroud)

但是在通话后FUNn()它显示以下错误:

FUNn()
# Error in { : could not find function "{"
Run Code Online (Sandbox Code Playgroud)

PS:虽然environment(FUNn)指向内存中的同一个地方,但在我打电话时却没有出现ls()

ls(envir = envizito, all.names = TRUE)
# [1] "aaa"
Run Code Online (Sandbox Code Playgroud)

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

Lyz*_*deR 5

{像R中不是对象的其他东西一样,是一个函数.创建时envizito,您将空环境指定为其父级.名称提示的空环境不包含任何对象,即它是空的.

当你改变FUNn环境时,envisito你的父环境就是空的环境.当你调用FUNn(函数定义在全局环境中)时,它在其环境(即envisito)中搜索函数{(它找到的第一个函数FUNn).它找不到{内部envisito,所以它看起来就像一个环境.然而,那个环境empty environment是空的.因此,它失败并出现无法找到功能的错误{.