Я прочитал документацию для parent.env(), и она кажется довольно простой - она возвращает окружение. Однако, если я использую parent.env(), чтобы ходить по цепочке окружающих сред, я вижу то, что я не могу объяснить. Во-первых, код (взятый из "R в двух словах" )
library( PerformanceAnalytics )
x = environment(chart.RelativePerformance)
while (environmentName(x) != environmentName(emptyenv()))
{
print(environmentName(parent.env(x)))
x <- parent.env(x)
}
И результаты:
[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"
Как мы можем объяснить "базу" наверху и "базу" внизу? Кроме того, как мы можем объяснить "пакет: PerformanceAnalytics" и "import: PerformanceAnalytics"? Все казалось бы последовательным без первых двух строк. То есть, функция chart.RelativePerformance находится в пакете: среда PerformanceAnalytics, созданная xts, которая создается зоопарком,... полностью вверх (или вниз) на базовую и пустую среду.
Кроме того, документация не очень понятна для этого - это "окружающая среда" - среда, в которой создается другая среда, и, таким образом, ходьба parent.env() показывает цепочку создания?
Edit
Бесстыдный плагин: я написал сообщение в блоге, в котором объясняются среды, parent.env(), оболочки, пространство имен/пакет и т.д. с интуитивным диаграммы.