Пример матрицы ясно дает понять процесс. В случае вдвойне индексированного массива индексная матрица может состоять из двух столбцов и так много строк как требуется. Входы в индексной матрице – строка и индексы столбца для вдвойне индексированного массива. Предположим, например, что у нас есть массив X4-на-5, и хотим сделать следующее:
– извлечь элементы X [1,3], X [2,2] и X [3,1] как векторную структуру, и
– заменить эти записи в массиве X нулями.
В этом случае необходим массив нижнего индекса 3-на-2, как в следующем примере.
> x <– array (1:20, dim=c (4,5)) # генерирует массив 4 на 5.
> x
Пример массива 4 на 5
> i <– array (c (1:3,3:1), dim=c (3,2))
> i # i является индексным массивом 3 на 2
Использование индексного массива
> x [i] <– 0 # Заменяет те элементы нулями.
> x
Групповая замена
Отрицательные индексы не разрешены при индексировании матрицы. Разрешены NA и нулевое значение: строки в индексной матрице, содержащей нуль, игнорируются, и строки, содержащие NA, производят NA в результате.
Как менее тривиальный пример, предположим, что необходимо генерировать (не приведенную) матрицу проекта для блочной конструкции, определенной блоками факторов (b уровни) и варианты (v уровни). Далее предположим, что в эксперименте есть n рисунков. Можно продолжить следующим образом:
> Xb <– matrix (0, n, b)
> Xv <– matrix (0, n, v)
> ib <– cbind (1:n, blocks)
> iv <– cbind (1:n, varieties)
> Xb [ib] <– 1
> Xv [iv] <– 1
> X <– cbind (Xb, Xv)
Для конструирования индексов матрицы, скажем N, можно использовать:
> N <– crossprod (Xb, Xv)
Однако более простым способом создания этой матрицы является использование table ():
> N <– table (blocks, varieties)
Индексная матрица должна быть числовой: предоставленная любая другая форма матрицы (логическая или символьная) обрабатывается как индексный вектор.
Так же, как давая векторной структуре атрибут dim, массивы могут быть созданы из векторов функцией массива array, у которой есть форма:
> Z <– array (data_vector, dim_vector)
Например, если вектор h содержит 24 или менее чисел, тогда команда:
> Z <– array (h, dim=c (3,4,2))
использовал бы h для создания массива Z размером 3-на-4-на-2. Если размер h точно 24, то результат выглядит так:
> Z <– h; dim (Z) <– c (3,4,2)
Однако, если h меньше, чем 24, его значения будут взяты циклически для дополнения до размера 24 (см. Раздел 5.4.1 [Правило рецикличности]), и