Определение языка R. Версия 3.5.2 (2018-12-20) DRAFT - страница 3
Если функция имеет «…» в качестве формального аргумента, который не соответствует формальным аргументам, то им сопоставляется «…».
2.1.11. Окружающая среда
Будем считать, что окружающие среды могут состоять из двух частей. Фрейм, состоящий из набора пар символ-значение, и обертка — указатель на обертку окружающей среды. Когда R ищет значение для символа, исследуется фрейм и, если соответствующий символ будет найден, его значение будет возвращено. В противном случае получают доступ к обертке окружающей среды, и процесс повторяется. Окружающие среды формируют древовидную структуру, в которой обертки играют роль родителей. Дерево окружающих сред имеет корень в пустой окружающей среде, доступной через emptyenv (), у которой нет родителя. Корень – прямой родитель окружающей среды основного (base) пакета (доступной через функцию baseenv ()). Прежде у baseenv () было специальное значение NULL, но начиная с версии 2.4.0 использование NULL, является не допустимым в качестве окружающей среды.
Окружающие среды создаются неявно вызовами функции, как описано в разделе 2.1.5 [Объекты функции], и разделе 3.5.2 [Лексическая окружающая среда]. В этом случае окружающая среда содержит переменные, локальные для функции (включая аргументы), а ее обертка является окружающей средой вызванной в настоящий момент функции. Окружающие среды также можно создать непосредственно new. env. К контенту фрейма окружающей среды можно получить доступ и манипулирование при помощи ls, get и assign, включая eval и evalq.
Может использоваться функция 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»
В действительности объект не может иметь тип «