Ответ 1
Пока я соглашаюсь с общим советом Харлана (т.е. не используйте что-либо, если не понимаете его), я бы добавил:
Среда является фундаментальной концепцией в R и, на мой взгляд, чрезвычайно полезна (другими словами: они заслуживают понимания!). Среды очень важны для понимания вопросов, связанных с охватом. Некоторые основные вещи, которые вы должны понимать в этом контексте:
-
search()
: покажет вам рабочее пространство; среды перечислены в порядке приоритета. Основной средой является .GlobalEnv и всегда можно ссылаться как таковой. -
ls()
: покажет вам, что содержится в среде -
attach
/detach
: создает новую среду для объекта -
get
,assign
,<<-
и<-
: вы должны знать разницу между этими функциями -
with
: один метод работы с окружением без его присоединения.
Другой указатель: посмотрите пакет proto (используемый в ggplot), который использует среды для обеспечивают контролируемое наследование.
Наконец, я хотел бы указать, что среда очень похожа на списки: они могут хранить в себе любой объект (см. этот вопрос). Но в зависимости от вашего варианта использования (например, вы хотите иметь дело с наследованием и приоритетом), список может быть проще работать. И всегда можно attach
список в качестве среды.
Изменить: если вы хотите увидеть пример proto
при работе в ggplot
, посмотрите, что структура объекта ggplot, которая по существу представляет собой список, состоящий из части среды:
> p <- qplot(1:10, 1:10)
> str(p)
List of 8
$ data :'data.frame': 0 obs. of 0 variables
$ layers :List of 1
..$ :proto object
.. .. $ legend : logi NA
.. .. $ inherit.aes: logi TRUE
...
> class(p$layers[[1]])
[1] "proto" "environment"
> is.environment(p$layers[[1]])
[1] TRUE
Обратите внимание, как он создан с использованием proto и в результате содержит множество сред. Вы также можете построить отношения в этих объектах с помощью graph.proto
.