Что вам нужно понять, так это то, что матрицы R хранятся в порядке старших столбцов.Это означает, что матрица представляет собой последовательность чисел, упорядоченных по столбцам сверху вниз.
Поэтому, вычитая вектор из матрицы, вы можете представить его как операцию с 4 шагами:
- матрица превращается в последовательность чисел (вектор)
- ваш "список1" расширяется (повторяется), так что его длина соответствует длине вектора, построенного из матрицы.
- элементы в каждом вычитаются друг из друга
- числа снова собираются в матричную форму.
В вашем случае:
1) матрица превращается впоследовательность чисел (по столбцам), дающая вам:
1, 1, 1 ,1 ... 1, 2, 2, 2, 2, ... 2, ... ... 10, 10, 10, 10, ... 10
2) Ваш второй вектор повторяется, пока он не совпадает с первым:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8, 9, 10, ... 1, 2, 3, ... 10
3) Теперь они оба имеютодинаковой длины, поэтому они вычитаются друг из друга:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, ..., -9, -8, -7, ... 0
4) Результат снова преобразуется в матрицу, что дает вам матрицу, которую вы видите.
Для того, чтобы получить желаемоерезультат вы должны принять этов учетную запись.Один из способов - это транспонировать матрицу, выполнить вычитание и снова транспонировать ее:
t(t(matrix) - list1)
Это работает, потому что после транспонирования t
строки превращаются в столбцы.
ДругойПодход состоит в том, чтобы создать матрицу из вашего вектора list1:
matrix2 <- matrix(list1, nrow=10, ncol=10, byrow=TRUE)
, а затем выполнить вычитание:
diff <- matrix - matrix2