2011-09-16 20 views

Trả lời

88

parent.env là môi trường trong đó đóng cửa (ví dụ: chức năng) được xác định. parent.frame là môi trường mà từ đó đóng cửa được gọi.

f = function() 
    c(f=environment(), defined_in=parent.env(environment()), 
     called_from=parent.frame()) 
g = function() 
    c(g=environment(), f()) 

và sau đó

> g() 
$g 
<environment: 0x14060e8> 

$f 
<environment: 0x1405f28> 

$defined_in 
<environment: R_GlobalEnv> 

$called_from 
<environment: 0x14060e8> 

Tôi không chắc chắn khi chỉ một chết sẽ không bao giờ thực sự muốn sử dụng chúng, nhưng khái niệm này rất hữu ích trong việc tìm hiểu phạm vi từ vựng đây

> f = function() x 
> g = function() { x = 2; f() } 
> h = function() { x = 3; function() x } 
> x = 1 
> f() 
[1] 1 
> g() 
[1] 1 
> h()() 
[1] 3 

hoặc trong ví dụ 'tài khoản ngân hàng' bí ẩn trong phần Giới thiệu về R. Đoạn đầu tiên của phần Chi tiết của ?parent.frame có thể làm rõ mọi thứ.

Môi trường phổ biến trong R, ví dụ: đường dẫn search() là (khoảng) các môi trường được xích lại với nhau trong mối quan hệ anh chị em -> mẹ. Đôi khi, hãy xem env = new.env(parent=emptyenv()) để phá vỡ biểu tượng tra cứu - thông thường env[["x"]] sẽ trông đầu tiên trong env và sau đó trong phụ huynh của env nếu không tìm thấy. Tương tự, <<- tìm kiếm nhiệm vụ bắt đầu từ parent.env. Việc triển khai lớp tham chiếu tương đối mới trong R dựa trên các ý tưởng này để xác định một môi trường cụ thể của cá thể mà trong đó các ký hiệu (các trường và phương thức instance) có thể được tìm thấy.

Các vấn đề liên quan