Я прочитал документацию для 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» и «импорт: PerformanceAnalytics»?Все казалось бы последовательным без первых двух строк.То есть функция chart.RelativePerformance находится в пакете: среда PerformanceAnalytics, которая создается xts, которая создается zoo, ... вплоть до (или вниз) до базовой и пустой среды.
Кроме того, документация не очень ясна по этому вопросу - является ли "окружающая среда" средой, в которой создается другая среда, и, таким образом, parent.env () показывает цепочку "создания"?
Править
Бесстыдный плагин: я написал сообщение в блоге , которое объясняет окружения, parent.env (), вложения, пространство имен / пакет и т. Д. С помощью интуитивных диаграмм.