Может использоваться функция parent. env для получения доступа к обертке окружающей среды.
В отличие от большинства другихобъектов R, окружающая среда не копируется при передаче в функцию или использовании в присвоениях. Таким образом, если присвоить одну и ту же окружающую среду нескольким символам и изменить одну из них, то другие изменятся также. В частности присвоение атрибутов окружающей среде может привести к неожиданностям.
2.1.12. Объекты парных списков
Объекты парных списков (Pairlist) подобны спискам точечной пары Lisp. Они интенсивно используются внутри R, но редко видимы в интерпретируемом коде, хотя они возвращаются formals, и могут быть созданы, например, функцией pairlist. pairlist с нулевой длиной равен NULL, как ожидался бы в Lisp, но в отличие от списка нулевой длины. У каждого такого объекта есть три слота, значение CAR, значение CDR и значение TAG. Значение TAG – текстовая строка, и CAR и CDR обычно представляют, соответственно, элемент списка (голова) и остаток (хвост) списка с объектом NULL как разделитель (терминология CAR/CDR – традиционна для Lisp и первоначально упоминалась как адрес и декрементные регистры на компьютерах IBM в начале 60-ых).
Парные списки обрабатываются на языкеR точно таким же образом как универсальные векторы («lists»). В частности к элементам получают доступ, используя то же самый синтаксис [[]]. Использование парных списков является сомнительным, так как универсальные векторы обычно более эффективны в использовании. При получении доступа к внутреннему парному списку из R обычно (включая подмножества) преобразуют в универсальный вектор.
В очень немногих случаях парные списки видимы пользователем: одним из таких является. Options.
2.1.13. Тип «Any»
В действительности объект не может иметь тип «Any», что, однако, допустимо для значения типа. Случается при определенных (довольно редких) обстоятельствах, например, as.vector (x,«any») указывает, что не следует делать приведение типа.
2.2. Атрибуты
У всех объектов кроме NULL могут быть один или более атрибутов, присоединенных к ним. Атрибуты сохранятся как pairlist, где все элементы именованы, но их следует рассматривать как ряд пар name=value. Можно получить список атрибутов, используя атрибуты и набор атрибутами <-, к отдельным компонентам получают доступ, используя attr и attr <-.
У некоторых атрибутов есть специальные функции доступа (например, levels <- для факторов), и они должны использоваться при доступности. В дополнение к скрытым деталям реализации они могут выполнить дополнительные операции. R пытается принять вызовы attr <- и attributes <-, которые включают специальные атрибуты, и осуществляет проверку непротиворечивости.
Матрицы и массивы – просто векторы с атрибутом размерности и дополнительно с именем размерности (dimnames), присоединенные к вектору.
Атрибуты используются для реализации структуры класса, используемой в R. Если у объекта есть атрибут класса, то атрибут будет исследован во время оценки. Структура класса в R описана подробно в главе 5 [Объектно-ориентированное программирование].
2.2.1. Имена
Атрибут имени (names) при его присутствии маркирует отдельные элементы вектора или списка. При печати объекта атрибут имени при его присутствии используется для маркировки элементов. Атрибут имен может также использоваться для индексирования результата, например, quantile (x) [«25%»].
Можно получить и определить имена, используя конструкции