根据R语言定义:
与大多数其他R对象不同,传递时不会复制环境 功能或用于作业。因此,如果你指定相同的 环境到几个符号并改变一个,其他符号将改变 太。 特别是,为环境分配属性可能会导致 惊喜。
> e = new.env()
> attr(e, "mynumber", TRUE)
NULL
> attr(e, "mynumber") = 555
> attr(e, "mynum")
[1] 555
究竟有什么惊喜?
答案 0 :(得分:4)
我们为e
at
属性和f
at
属性分配2的示例也会自动更改:
e <- new.env()
attr(e, "at") <- 1
f <- e
attr(e, "at") <- 2
attributes(f)
## $at
## [1] 2
答案 1 :(得分:2)
如果您更改父环境,也会导致意外,特别是如果您依赖继承。
e <- new.env()
e$foo <- function() {print("bar")}
f <- new.env(parent=e)
g <- f
with(g,foo)()
[1] "bar"
parent.env(f) <- .GlobalEnv
with(g,foo)()
Error in eval(expr, envir, enclos) : object 'foo' not found