我很少了解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
为什么会返回此错误?
如何解决?
答案 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()