将属性分配给环境会导致意外吗?

时间:2014-10-23 14:05:26

标签: r

根据R语言定义:

  

与大多数其他R对象不同,传递时不会复制环境   功能或用于作业。因此,如果你指定相同的   环境到几个符号并改变一个,其他符号将改变   太。 特别是,为环境分配属性可能会导致   惊喜。

> e = new.env()
> attr(e, "mynumber", TRUE)
NULL
> attr(e, "mynumber") = 555
> attr(e, "mynum")
[1] 555

究竟有什么惊喜?

2 个答案:

答案 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