R:环境查找

时间:2012-04-23 08:04:59

标签: r

我对R的查找机制感到有些困惑。当我有以下代码时

# create chain of empty environments
e1 <- new.env()
e2 <- new.env(parent=e1)
e3 <- new.env(parent=e2)

# set key/value pairs
e1[["x"]] <- 1
e2[["x"]] <- 2
如果我在环境e3中寻找“x”,那么我希望得到“2”。 如果我这样做,这是有效的

> get(x="x", envir=e3)
[1] 2

但如果我使用

则不行
> e3[["x"]]
NULL

有人可以解释一下这个区别吗?看来,

e3[["x"]]

不仅仅是

的语法糖
get(x="x", envir=e3)


提前谢谢,
斯文

1 个答案:

答案 0 :(得分:9)

这些功能不同。

get执行environemnt中的对象搜索,以及封闭的框架(默认情况下):

来自?get

此函数查看名称x是否具有在指定环境中绑定到它的值。如果inherits为TRUE且在指定环境中未找到x的值,则会搜索环境的封闭框架,直到遇到名称x。有关环境结构及其机箱的详细信息,请参阅环境和“R语言定义”手册。

相反,默认情况下,[运算符不会搜索封闭环境。

来自?'['

$和[[可以应用于环境。只允许使用字符索引,不进行部分匹配。这些操作的语义是get(i, env=x, inherits=FALSE)

的语义