Заметим, что в случае символьного вектора, «sorted» означает сортировку в алфавитном порядке.
Создаются факторы аналогичным образом с помощью функции factor ():
Функция print () обрабатывает факторы несколько иначе, чем другие объекты:
Чтобы выяснить уровни фактора можно использовать функцию level ():
4.2. Функция tapply () и массивы с переменной длиной строк
Чтобы продолжить предыдущий пример, предположим, что у нас есть доходы от каждого налогоплательщика в другом векторе (в подходящих крупных денежных единицах):
Чтобы вычислить средний доход в выборке по каждому штату используем теперь специальную функцию tapply ():
дающей вектор средних с компонентами, маркированными уровнями:
Функция tapply () используется для применения здесь функции mean () к каждой группе компонентов первого параметра, здесь доходов, определенные уровнями второго компонента, здесь statef, как будто они были отдельными векторными структурами. Результат – структура той же самой длины как атрибут уровней фактора, содержащего результаты.
Обратите внимание на то, что tapply () также работает в этом случае, когда его второй параметр не фактор, например, «tapply (incomes, state)», и это верно для довольно многих других функций, так как при необходимости параметры преобразованы в факторы (используется as. factor ()).
Читатель должен консультироваться с документом справки для большего количества деталей.
Предположи далее, что необходимо вычислить стандартные ошибки средних доходов штата. Для этого следует записать функцию R для вычисления стандартной ошибки для любого данного вектора. Так как существует встроенная функция var () для вычисления дисперсии выборки, то такая функция записывается в виде одной строки, задаваемая присвоением:
Написание функций рассмотрим позже в Главе 10 [Написание собственных функций], и в этом случае было ненужным, поскольку R также имеет встроенную функцию sd (). После этого присвоения стандартные ошибки вычислены:
и затем вычисленные величины:
В качестве примера можно вычислить обычные 95%-ые доверительные границы для средних доходов штата. Для этого можно использовать tapply () еще раз с функцией length (), чтобы найти размеры выборки, и функцию qt (), чтобы найти процентные точки соответствующих t-распределений. Также можно рассмотреть средства R для t-тестов.
Также можно применить функцию tapply () к более сложной индексация вектора на несколько категорий. Например, можно разделить налоговые счета как по штатам, так и по полу. Однако в этом простом примере (только один фактор) то, что происходит, можно представить следующим образом. Значение в векторе собрано в группы, соответствующие различным позициям в факторе. Затем функция применяется к каждой из этих групп отдельно. Результат – это вектор значений функции, маркированных согласно levels фактора.
Комбинация вектора и фактора меток – пример того, что иногда называют неровными массивами, так как размеры подкласса возможно не одинаковы. Когда размеры подкласса всегда одинаковы, то индексация может быть сделана неявно и намного более эффективно, как увидим в следующем разделе.