Для матрицы 4×6 m в R есть ли какая-либо разница между m [1: 4] и m [, 1: 6]?

#r #matrix

#r #матрица

Вопрос:

Я пытаюсь понять, как R проходит через элементы матрицы, поэтому я экспериментировал с этим. Очевидно, они точно такие же?

 > m <- matrix (NA, nrow = 4, ncol = 6)
> m [, 1:6] <- 1:6
> m
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    5    3    1    5    3
[2,]    2    6    4    2    6    4
[3,]    3    1    5    3    1    5
[4,]    4    2    6    4    2    6
> m [1:4, ] <- 1:6
> m
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    5    3    1    5    3
[2,]    2    6    4    2    6    4
[3,]    3    1    5    3    1    5
[4,]    4    2    6    4    2    6
  

Комментарии:

1. Он основан на повторном использовании значений в порядке столбцов (для data.frame, матрицы в R). В первом случае вы присваиваете столбцам 1: 6 значение 1: 6. Если вы заметили, как она распределена. Количество строк равно 4, поэтому первые четыре значения заполняют первый столбец, затем 5, 6 во втором столбце первые две строки, а затем перерабатывают с начала. Во втором случае вы присваиваете строкам от 1 до 4. Здесь он также движется в том же направлении, т. Е. по столбцу

2. Существует ли ситуация, когда m [, 1: 6] и m [1: 4] имеют значение?

3. Присвоение зависит от повторного присвоения значения. Я бы предпочел скопировать значения, чтобы избежать любых возможных ошибок

4. Если вы хотите полагаться на переработку, я бы не использовал ни один из ваших вариантов, а вместо m[] <- 1:6 этого. Или, если вы создаете матрицу с нуля, не заполняйте ее NA сначала, перейдите прямо к matrix(1:6, nrow = 4, ncol = 6) . Они будут выполнять всю матрицу независимо от размера и избегать любых ошибок, когда у вас другое количество строк или столбцов, чем на самом деле.

5. Я хочу знать, есть ли какая-либо разница между ними. Я использовал пример заполнения только в качестве эксперимента. Можете ли вы представить эксперимент, в котором они отличаются, m [1: 4] и m [, 1: 6]?

Ответ №1:

Если ваш вопрос заключается в том, что для данной матрицы m ( m <- matrix (NA, nrow = 4, ncol = 6) ) . Есть ли какая-либо разница между m[1:4, ] <- 1:6 и m[, 1:6] <- 1:6 тогда ответ ОТРИЦАТЕЛЬНЫЙ. Это также похоже на m [] <- 1:6 то, где вам не нужно указывать индекс строки или столбца.

Однако, как уже отмечали другие, это связано с переработкой значений 1:6 , и поскольку количество мест для заполнения ( nrow * ncol т. е. 4 * 6 = 24 ) Полностью делится на количество предоставленных значений ( 6 ), это работает. Если вы передадите неравномерное количество значений, которые не заполняют матрицу полностью, это приведет к ошибке. Например —

 m [1:4, ] <- 1:5
  

Ошибка в m[1:4, ] <- 1:5 :
количество элементов для замены не кратно длине замены

Итак, если вы полагаетесь на переработку для заполнения матрицы, вы должны быть полностью осведомлены о том, что она делает, и о побочных эффектах, которые она может иметь.