после которого digits является символьным вектором c («0», «1», «2»…, «9»). Дальнейшее приведение, или изменение типа, восстанавливает числовой вектор снова:
> d <– as.integer (digits)
Теперь d и z одинаковы. Существует большое количество функций вида as.something () или для приведения от одного типа к другому, или для наделения объекта некоторым другим атрибутом, которым он, возможно, еще не обладает.
В целом приведение от числового к символьному типу и назад не будет точно обратимо из-за ошибок округления в символьном представлении.
Читатель должен консультироваться с различными справочными файлами для ознакомления.
3.2. Изменяющаяся длина объекта
«Пустой» объект может все еще иметь тип. Например:
> e <– numeric ()
делает e пустой векторной структурой типа числовой (numeriс). Так же character () является пустым символьным вектором, и так далее. Как только объект любого размера был создан, новые компоненты могут быть просто добавлены к нему, давая ему значение индексов вне его предыдущего диапазона. Таким образом:
> e [3] <– 17
теперь делает e вектором длины 3, (первые две компоненты, которого равны NA). Это применяется к любой структуре вообще, если тип дополнительного компонента (ов) согласован с типом первого объекта.
Эта автоматическая настройка длин объекта часто используется для ввода, например, в функции scan () (см. Раздел 7.2 [Функция scan ()]).
Наоборот требуется усечение размера объекта для выполнения присвоения. Следовательно, если alpha – объект длины 10, то
> alpha <– alpha [2 * 1:5]
делает его объектом длины 5, состоящим только из прежних компонентов с четным индексом. (Старые индексы не сохранены, конечно). Затем можно сохранить только первые три значения:
> length (alpha) <– 3
и вектор может быть расширен (путем пропущенных значений) аналогичным образом.
3.3. Получение и установка атрибутов
Функция attributes (object) возвращает список всех не внутренних атрибутов, в настоящий момент определенных для этого объекта. Можно использовать функцию attr (object, name) для выбора определенного атрибута. Эта функция редко используются, за исключением довольно особых обстоятельств, когда некоторый новый атрибут создается для некоторой конкретной цели, например, для присоединения даты создания или оператора с объектом R. Понять, однако, очень важно.
Некоторое внимание должно быть уделено, когда присваиваются или удаляются атрибуты как неотъемлемая часть системы объекта, используемой в R.
Когда такое используется на левой стороне присвоения, то оно может использоваться или для присоединения нового атрибута с object или изменения существующего. Например:
> attr (z, «dim») <– c (10,10)
позволяет R обрабатывать z как будто он является матрицей 10-на-10.
3.4. Класс объекта
У всех объектов в R есть класс (class), определяемы при помощи функции class. Для простых векторов это – только тип, например, «numeric», «logical», «character» или «list», но «matrix», «array», «factor» и "data.frame» " являются другими возможными значениями.
Специальный атрибут, известный как class (класс) объекта, используется для учета объектно-ориентированного стиля программирования в R. Например, если у объекта будет класс "data.frame», то он будет напечатан определенным способом, функция plot () выведет на экран его графически определенным способом, и другие, так называемые универсальные функции, такие как summary (), будут реагировать на него как на параметр, способом применимым к его классу.
Чтобы удалить временно эффект класса, используйте функцию unclass (). Например, если у winter есть класс "data.frame» то:
> winter
напечатает его в форме фрейма данных, которая скорее походит на матрицу, тогда как:
> unclass (winter)
напечатает его как обычный список. Только в довольно специальных ситуациях следует использовать это средство, но каждый раз для достижения согласования идеи класса и универсальных функций.
Универсальные функции и классы будут обсуждены далее в Разделе 10.9 [Ориентация объекта], но только кратко.
4. Упорядоченные и неупорядоченные факторы
Фактор – векторный объект, используемый для спецификации дискретной классификации (группировки) компонентов других векторов одинаковой длины. R поддерживает как упорядоченные, так и не упорядоченные факторы. Хотя «реальное» применение факторов имеет место в формулах модели (см. Раздел 11.1.1 [Противоположности]), здесь рассмотрим на специальный пример.
4.1. Специальный пример
Предположим, например, имеется выборка 30 налоговых деклараций из всех штатов и территорий Австралии, и их индивидуальное происхождение указывается символьным вектором аббревиатуры штата как:
> state <– c («tas», «sa», «qld», «nsw», «nsw», «nt», «wa», «wa»,
«qld», «vic», «nsw», «vic», «qld», «qld», «sa», «tas»,
«sa», «nt», «wa», «vic», «qld», «nsw», «nsw», «wa»,
«sa», «act», «nsw», «vic», «vic», «act»)
Заметим, что в случае символьного вектора, «sorted» означает сортировку в алфавитном порядке.
Создаются факторы аналогичным образом с помощью функции factor ():
> statef <– factor (state)
Функция print () обрабатывает факторы несколько иначе, чем другие объекты:
> statef
[1] tas sa qld nsw nsw nt wa wa qld vic nsw vic qld qld sa
[16] tas sa nt wa vic qld nsw nsw wa sa act nsw vic vic act
Levels: act nsw nt qld sa tas vic wa
Чтобы выяснить уровни фактора можно использовать функцию level ():
> levels (statef)
[1] «act» «nsw» «nt» «qld» «sa» «tas» «vic» «wa»
4.2. Функция tapply () и массивы с переменной длиной строк
Чтобы продолжить предыдущий пример, предположим, что у нас есть доходы от каждого налогоплательщика в другом векторе (в подходящих крупных денежных единицах):