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.
Nguồn
2011-09-16 02:35:47