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

时间:2016-01-25 00:51:45

标签: r environment-variables

我很少了解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()

此代码返回错误

Error in eval(expr, envir, enclos) : object 'mylist' not found
  • 为什么会返回此错误?

  • 如何解决?

1 个答案:

答案 0 :(得分:3)

关于eval来电的父框架,push没有发生,只有assign是。

可以将parent.frame()传递给eval或采用以下似乎更清晰的风格。 (main不变。)

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

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

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