我对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)
提前谢谢,
斯文
答案 0 :(得分:9)
这些功能不同。
get
执行environemnt中的对象搜索,以及封闭的框架(默认情况下):
来自?get
:
此函数查看名称x是否具有在指定环境中绑定到它的值。如果inherits为TRUE且在指定环境中未找到x的值,则会搜索环境的封闭框架,直到遇到名称x。有关环境结构及其机箱的详细信息,请参阅环境和“R语言定义”手册。
相反,默认情况下,[
运算符不会搜索封闭环境。
来自?'['
:
$和[[可以应用于环境。只允许使用字符索引,不进行部分匹配。这些操作的语义是get(i, env=x, inherits=FALSE)
。