2012-04-23 36 views
6

Tôi hơi bối rối bởi cơ chế tra cứu của R. Khi tôi có mã sau đâyR: tra cứu môi trường

# 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 

thì tôi sẽ nhận được "2" nếu tôi tìm "x" trong môi trường e3. này hoạt động nếu tôi làm

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

nhưng không nếu tôi sử dụng

> e3[["x"]] 
NULL 

ai đó có thể giải thích sự khác biệt? Dường như, đó

e3[["x"]] 

không phải là đường chỉ là cú pháp cho

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


Cảm ơn trước,
Sven

Trả lời

9

Những chức năng khác nhau.

get thực hiện tìm kiếm cho một đối tượng trong một environemnt, cũng như các khung kèm theo (theo mặc định):

Từ ?get:

Chức năng này trông để xem nếu tên x có giá trị liên kết với nó trong môi trường được chỉ định. Nếu thừa kế là TRUE và không tìm thấy giá trị cho x trong môi trường được chỉ định, các khung bao quanh của môi trường được tìm kiếm cho đến khi tên x được gặp phải. Xem hướng dẫn về môi trường và sách hướng dẫn 'Định nghĩa ngôn ngữ R' để biết chi tiết về cấu trúc của môi trường và vỏ bọc của chúng.

Ngược lại, toán tử [ không tìm kiếm môi trường kèm theo, theo mặc định.

Từ ?'[':

Cả $ và [[có thể được áp dụng cho môi trường. Chỉ các chỉ số ký tự được phép và không có kết hợp từng phần được thực hiện. Ngữ nghĩa của các hoạt động này là của các số get(i, env=x, inherits=FALSE).

+0

Cảm ơn bạn rất nhiều –