He leído la documentación para parent.env() y parece bastante sencillo: devuelve el entorno adjunto. Sin embargo, si uso parent.env() para recorrer la cadena de entornos circundantes, veo algo que no puedo explicar. En primer lugar, el código (tomado de "R en una cáscara de nuez")parent.env (x) confusion
library(PerformanceAnalytics)
x = environment(chart.RelativePerformance)
while (environmentName(x) != environmentName(emptyenv()))
{
print(environmentName(parent.env(x)))
x <- parent.env(x)
}
Y los resultados:
[1] "imports:PerformanceAnalytics"
[1] "base"
[1] "R_GlobalEnv"
[1] "package:PerformanceAnalytics"
[1] "package:xts"
[1] "package:zoo"
[1] "tools:rstudio"
[1] "package:stats"
[1] "package:graphics"
[1] "package:utils"
[1] "package:datasets"
[1] "package:grDevices"
[1] "package:roxygen2"
[1] "package:digest"
[1] "package:methods"
[1] "Autoloads"
[1] "base"
[1] "R_EmptyEnv"
¿Cómo podemos explicar la "base" en la parte superior y la "base" en la parte ¿fondo? Además, ¿cómo podemos explicar "package: PerformanceAnalytics" e "imports: PerformanceAnalytics"? Todo parecería consistente sin las dos primeras líneas. Es decir, el gráfico de funciones. El rendimiento relativo está en el paquete: entorno PerformanceAnalytics creado por xts, que es creado por el zoológico, ... hasta arriba (o abajo) hasta la base y el entorno vacío.
Además, la documentación no es muy clara al respecto: ¿el "entorno circundante" es el entorno en el que se crea otro entorno y, por lo tanto, al caminar parent.env() muestra una cadena de "creación"?
Editar
Enchufe desvergonzado: Me escribió una blog post que explica ambientes, parent.env(), recintos, espacio de nombres/paquete, etc. con diagramas intuitivos.
gracias a todos los que contribuyeron a esta pregunta. Fue difícil elegir una respuesta porque todas las publicaciones fueron excelentes – SFun28