6

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


在此先感谢,
斯文

4

1 回答 1

9

这些功能是不同的。

get搜索环境中的对象以及封闭框架(默认情况下):

来自?get

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

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

来自?'['

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

于 2012-04-23T08:11:59.580 回答