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 以下の数値のみを使用できます。
たとえば、次の構文を使用して行列の 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 レベル以上の因子にのみ適用できます。