2010-09-20 2 views
3

В R documentation on arrays состоянииПонимание индексации массива в R

Значения в векторе данных дают значения в массиве в том же порядке, как они будут происходить в FORTRAN, то есть «колонок крупного заказа,» с первый индекс движется быстрее, а последний индекс - самый медленный.

Затем позже дает a clarifying example этим путем загрузки данных в два двухмерного массива:

> x <- array(1:20, dim=c(4,5)) # Generate a 4 by 5 array. 
> x 
     [,1] [,2] [,3] [,4] [,5] 
[1,] 1 5 9 13 17 
[2,] 2 6 10 14 18 
[3,] 3 7 11 15 19 
[4,] 4 8 12 16 20 

Из опыта с другими языками, я думаю x[1, 2], а не x[2, 1], будет 2, но это довольно легко настроить мое мышление. Однако, так же быстро, как я выполняю свою смену ментальную модель, следующий пример разбивает его на части:

> i <- array(c(1:3,3:1), dim=c(3,2)) 
> i        # i is a 3 by 2 index array. 
     [,1] [,2] 
[1,] 1 3 
[2,] 2 2 
[3,] 3 1 
> x[i]       # Extract those elements 
[1] 9 6 3 

Таким образом, я могу увидеть, что произошло здесь в том, что мы извлекли элементы x[1, 3], x[2,2] и x[3, 1]. Хорошо, но разве этот пробег полностью не соответствует вышеуказанному требованию «основного порядка столбцов»?

Из того, что я понял, i должен был 2 на 3 массив а, и Р должен быть интерпретирован, как x[i]x[i[1, 1], i[2, 1]], x[i[1, 2], i[2, 2]], .... Однако мы наблюдаем, что вместо этого R сделал x[i[1, 1], i[1, 2]], x[i[2, 1], i[2, 2]], ...

Является ли это фундаментальной несогласованностью в R или я полностью неправильно понял документацию?

ответ

6

«колонка основного порядка» означает только, что внутренне матрицы - это векторы, упорядоченные по столбцу; см., что

x[1:20] 

1, 2, 3, ..., 19, 20. Размеры упорядочены, как обычно, в науке - первые строки, затем столбцы, затем глубина, затем гипердепт ... Третий пример сложный: если i имеет такое же количество столбцов, что и размеры x, оно интерпретируется как векторный выбор. Если нет, то и i, и x будут польщены от столбцов и применяются простые правила векторной индексации ... например x[t(i)] - 1:20[c(1,3,2,2,3,1)].

1

Это совсем другое. Как вы заметили, матрица с двумя столбцами используется в качестве координат для получения элементов x. Это почти произвольный выбор дизайна, если вы используете 2-столбцовые или 2-рядные матрицы для этого, это не связано с тем, как заполняются матрицы.

Ребята из R выбрали 2 колонки.

+0

Был добавлен еще один ответ, который должен был (вероятно) быть ответом на этот пост. Я добавил скриншот недавно удаленного ответа (http://i.stack.imgur.com/6wHOs.png), чтобы помочь пользователям с репутацией менее 10 тыс. (Что может помочь им). Прошу прощения за неудобства, привет. –