วิธีซ่อมแซมใน 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 ระดับขึ้นไปเท่านั้น

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *