2012-04-23 51 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