2012-04-23 49 views
6

我对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 

然后我希望得到“2”,如果我在环境e3中寻找“x”。 这工作,如果我做

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

但如果我用

> e3[["x"]] 
NULL 

有人能解释的区别?看来,这

e3[["x"]] 

不是

get(x="x", envir=e3) 


由于提前,
斯文

回答

9

这些功能是不同的只是语法糖。

get执行在environemnt用于对象的搜索,以及包围帧(默认情况下):

?get

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

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

?'['

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

+0

非常感谢 – 2012-04-23 08:15:35