studio - superponer graficas en r
Cuál es la diferencia entre parent.frame() y parent.env() en R; ¿Cómo difieren en llamadas por referencia? (1)
parent.env
es el entorno en el que se define un cierre (por ejemplo, una función). parent.frame
es el entorno desde el que se invocó el cierre.
f = function()
c(f=environment(), defined_in=parent.env(environment()),
called_from=parent.frame())
g = function()
c(g=environment(), f())
y entonces
> g()
$g
<environment: 0x14060e8>
$f
<environment: 0x1405f28>
$defined_in
<environment: R_GlobalEnv>
$called_from
<environment: 0x14060e8>
No estoy seguro de cuándo un simple mortal alguna vez querría usarlos, pero los conceptos son útiles para entender el alcance léxico aquí.
> 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
o en el ejemplo enigmático de "cuenta bancaria" en la Introducción a R. El primer párrafo de la sección de Detalles de ?parent.frame
podría aclarar las cosas.
Los entornos son omnipresentes en R, por ejemplo, la ruta de search()
es (aproximadamente) entornos encadenados en una relación hermano -> padre. A veces se ve env = new.env(parent=emptyenv())
para eludir la búsqueda de símbolos, normalmente env[["x"]]
se vería primero en env
, y luego en el padre de env
si no se encuentra. Del mismo modo, <<-
busca la asignación comenzando en parent.env
. La implementación de clase de referencia relativamente nueva en R se basa en estas ideas para definir un entorno específico de instancia en el que se pueden encontrar símbolos (campos y métodos de instancia).
Sería útil si alguien puede ilustrar esto con un simple ejemplo?
Además, ¿dónde sería útil utilizar parent.frame()
lugar de parent.env()
y viceversa?