В чем разница между родителями.кадр () и родитель.env () в R; как они отличаются по вызову по ссылке?
было бы полезно, если кто-то может проиллюстрировать это на простом примере?
кроме того, где было бы полезно использовать parent.frame() вместо parent.env() и наоборот.
1 ответ:
parent.env- это среда, в которой определяется замыкание (например, функция).parent.frame- это среда, из которой был вызван закрытием.f = function() c(f=environment(), defined_in=parent.env(environment()), called_from=parent.frame()) g = function() c(g=environment(), f())а то
> g() $g <environment: 0x14060e8> $f <environment: 0x1405f28> $defined_in <environment: R_GlobalEnv> $called_from <environment: 0x14060e8>Я не уверен, когда простой смертный действительно захочет их использовать, но понятия полезны для понимания лексического объема здесь
> 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или в загадочном примере "банковский счет" во введении к R. Первый абзац раздела детали
?parent.frameможет все прояснить.среды распространены в R, например,
search()путь - это (приблизительно) среды, связанные вместе в родственных отношениях -> родитель. Иногда видишьenv = new.env(parent=emptyenv())чтобы обойти символ look-up -- нормальноenv[["x"]]посмотрел бы сначала вenv, а затем вenvродитель, если не найден. Аналогично,<<-ищет назначение, начиная сparent.env. Относительно новая реализация ссылочного класса в R опирается на эти идеи для определения специфичная для экземпляра среда, в которой можно найти символы (поля и методы экземпляра).