为什么没有在此环境中定义对象?

Why is the object not defined in this environment?

我对环境在 R 中的工作原理知之甚少。

这是我的代码

push = function(l, x)
{
  assign(l, append(eval(as.name(l)), x), envir=parent.frame())
}

main = function()
{
    mylist = list("hello")
    push("mylist","World")
}

main()

此代码return是错误

Error in eval(expr, envir, enclos) : object 'mylist' not found

eval 未针对 push 调用的父框架发生,只有 assign 发生。

可以将 parent.frame() 传递给 eval 或采用以下看起来更清晰的样式。 (main不变。)

push = function(l, x, envir = parent.frame())
{
    envir[[l]] <- append(envir[[l]], x)
}

或传递对象本身并return它们以避免处理环境:

push <- function(l, x) append(l, x)
main <- function() {
  mylist <- list("Hello")
  push(mylist, "World")
}
main()