Как исправить в r: индекс выходит за пределы
Распространенная ошибка, с которой вы можете столкнуться в R:
Error in x[, 4]: subscript out of bounds
Эта ошибка возникает при попытке доступа к столбцу или строке несуществующей матрицы.
В этом руководстве показаны точные шаги, которые можно предпринять для устранения этой ошибки, на примере следующей матрицы:
#make this example reproducible set. seeds (0) #create matrix with 10 rows and 3 columns x = matrix(data = sample. int (100, 30), nrow = 10, ncol = 3) #print matrix print (x) [,1] [,2] [,3] [1,] 14 51 96 [2,] 68 85 44 [3,] 39 21 33 [4,] 1 54 35 [5,] 34 74 70 [6,] 87 7 86 [7,] 43 73 42 [8,] 100 79 38 [9,] 82 37 20 [10,] 59 92 28
Пример №1: индекс вне диапазона (со строками)
Следующий код пытается получить доступ к 11-й строке матрицы, которой не существует:
#attempt to display 11th row of matrix
x[11, ]
Error in x[11, ]: subscript out of bounds
Поскольку 11-й строки матрицы не существует, мы получаем ошибку индекса за пределами .
Если мы не знаем, сколько строк в матрице, мы можем использовать функцию nrow() , чтобы узнать:
#display number of rows in matrix
nrow(x)
[1] 10
Мы видим, что в матрице всего 10 строк. Таким образом, для доступа к строкам мы можем использовать только числа меньше или равные 10.
Например, мы можем использовать следующий синтаксис для отображения 10-й строки матрицы:
#display 10th row of matrix
x[10, ]
[1] 59 92 28
Пример №2: индекс вне диапазона (со столбцами)
Следующий код пытается получить доступ к 4-му столбцу матрицы, которого не существует:
#attempt to display 4th column of matrix
x[, 4]
Error in x[, 4]: subscript out of bounds
Поскольку 4-го столбца матрицы не существует, мы получаем ошибку индекса за пределами .
Если мы не знаем, сколько столбцов содержит матрица, мы можем использовать функцию ncol() , чтобы узнать:
#display number of columns in matrix
ncol(x)
[1] 3
Мы видим, что в матрице всего 3 столбца. Таким образом, для доступа к столбцам мы можем использовать только числа меньше или равные 3.
Например, мы можем использовать следующий синтаксис для отображения третьего столбца матрицы:
#display 3rd column of matrix
x[, 3]
[1] 96 44 33 35 70 86 42 38 20 28
Пример №3: индекс вне диапазона (строки и столбцы)
Следующий код пытается получить доступ к значению 11-й строки и 4-го столбца матрицы, которого не существует:
#attempt to display value in 11th row and 4th column
x[11, 4]
Error in x[11, 4]: subscript out of bounds
Поскольку ни 11-й строки, ни 4-го столбца матрицы не существует, мы получаем ошибку выхода индекса за пределы .
Если мы не знаем, сколько строк и столбцов в матрице, мы можем использовать функцию dim() , чтобы узнать:
#display number of rows and columns in matrix
dim(x)
[1] 10 3
Мы видим, что в матрице всего 10 строк и 3 столбца. Итак, при доступе к строкам и столбцам мы можем использовать только числа, меньшие или равные этим значениям.
Например, мы можем использовать следующий синтаксис для отображения значения в 10-й строке и 3-м столбце матрицы:
#display value in 10th row and 3rd column of matrix
x[10, 3]
[1] 28
Дополнительные ресурсы
В следующих руководствах объясняется, как устранить другие распространенные ошибки в R:
Как исправить в R: Имена не совпадают с предыдущими именами
Как исправить в R: длина более длинного объекта не кратна длине более короткого объекта
Как исправить в R: контрасты можно применять только к факторам с 2 и более уровнями