Как исправить в r: неправильное количество индексов в матрице


Ошибка, с которой вы можете столкнуться в R:

 Error in x[i, ] <- 0: incorrect number of subscripts on matrix

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

В этом руководстве объясняется, как именно исправить эту ошибку.

Пример 1. Исправление ошибки для одного значения

Предположим, у нас есть следующий вектор в R с 5 значениями:

 #definevector
x <- c(4, 6, 7, 7, 15)

Теперь предположим, что мы пытаемся присвоить значение «22» третьему элементу вектора:

 #attempt to assign the value '22' to element in third position
x[3, ] <- 22

Error in x[3, ] <- 22: incorrect number of subscripts on matrix

Мы получаем сообщение об ошибке, поскольку при попытке присвоить новое значение мы включили запятую.

Вместо этого нам просто нужно удалить команду:

 assign the value '22' to element in third position
x[3] <- 22

#display updated vector
x

[1] 4 6 22 7 15

Пример 2: исправить ошибку в цикле for

Эта ошибка также может возникнуть при попытке заменить несколько значений в векторе с помощью цикла for.

Например, следующий код пытается заменить каждое значение вектора нулем:

 #definevector
x <- c(4, 6, 7, 7, 15)

#attempt to replace every value in vector with zero
for (i in 1:length(x)) {
    x[i, ]=0
  }

Error in x[i, ] = 0: incorrect number of subscripts on matrix

Мы получаем сообщение об ошибке, поскольку при попытке присвоить нули мы включили запятую.

Вместо этого нам просто нужно удалить команду:

 #definevector
x <- c(4, 6, 7, 7, 15)

#replace every value in vector with zero
for (i in 1:length(x)) {
    x[i]=0
  }

#view updated vector
x

[1] 0 0 0 0 0

После удаления запятой код выполняется без ошибок.

Дополнительные ресурсы

Как исправить в R: NA, введенные принудительно
Как восстановить в R: индекс выходит за пределы
Как исправить ошибку в R: неправильное количество измерений

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *