วิธีการซ่อมแซมใน r: ระบบเป็นแบบเอกพจน์ทุกประการ
ข้อผิดพลาดที่คุณอาจพบใน R คือ:
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพยายามใช้ฟังก์ชัน solve() แต่เมทริกซ์ที่คุณกำลังทำงานอยู่นั้นเป็นเมทริกซ์เอกพจน์ที่ไม่มีเมทริกซ์ผกผัน
บทช่วยสอนนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดนี้ในทางปฏิบัติ
วิธีการทำซ้ำข้อผิดพลาด
สมมติว่าเราสร้างเมทริกซ์ต่อไปนี้ใน R:
#create singular matrix
mat <- matrix(c(1, 1, 1, 1), ncol= 2 , nrow= 2 )
#view matrix
mast
[,1] [,2]
[1,] 1 1
[2,] 1 1
ตอนนี้ สมมติว่าเราลองใช้ฟังก์ชัน solve() เพื่อคำนวณค่าผกผันของเมทริกซ์:
#attempt to invert matrix
solve(mat)
Error in solve.default(mat):
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
เราได้รับข้อผิดพลาดเนื่องจากเมทริกซ์ที่เราสร้างไม่มีเมทริกซ์ผกผัน
หมายเหตุ : ลองดู หน้านี้ จาก Wolfram MathWorld ซึ่งแสดงตัวอย่างเมทริกซ์ที่แตกต่างกัน 10 ตัวอย่างที่ไม่มีเมทริกซ์ผกผัน
ตามคำจำกัดความ เมทริกซ์จะเป็นเอกพจน์หากมีปัจจัยกำหนดเป็นศูนย์
คุณสามารถใช้ฟังก์ชัน det() เพื่อคำนวณดีเทอร์มิแนนต์ของเมทริกซ์ที่กำหนดก่อนที่จะพยายามกลับค่า:
#calculate determinant of matrix
det(mat)
[1] 0
ดีเทอร์มิแนนต์ของเมทริกซ์ของเราคือศูนย์ ซึ่งอธิบายว่าทำไมเราถึงพบข้อผิดพลาด
วิธีการแก้ไขข้อผิดพลาด
วิธีเดียวที่จะแก้ไขข้อผิดพลาดนี้คือเพียงสร้างเมทริกซ์ที่ไม่ใช่เอกพจน์
ตัวอย่างเช่น สมมติว่าเราใช้ฟังก์ชัน solve() เพื่อกลับเมทริกซ์ต่อไปนี้ใน R:
#create matrix that is not singular
mat <- matrix(c(1, 7, 4, 2), ncol= 2 , nrow= 2 )
#view matrix
mast
[,1] [,2]
[1,] 1 4
[2,] 7 2
#calculate determinant of matrix
det(mat)
[1] -26
#invert matrix
solve(mat)
[,1] [,2]
[1,] -0.07692308 0.15384615
[2,] 0.26923077 -0.03846154
เราไม่ได้รับข้อผิดพลาดใดๆ เมื่อกลับเมทริกซ์เนื่องจากเมทริกซ์ไม่ใช่เอกพจน์
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่น ๆ ใน R:
วิธีแก้ไข: เงื่อนไขมีความยาว > 1 และระบบจะใช้เฉพาะองค์ประกอบแรกเท่านั้น
วิธีแก้ไข: อาร์กิวเมนต์ที่ไม่ใช่ตัวเลขของตัวดำเนินการไบนารี
วิธีแก้ไข: dim(X) ต้องมีความยาวเป็นค่าบวก
วิธีแก้ไข: ข้อผิดพลาดในการเลือกอาร์กิวเมนต์ที่ไม่ได้ใช้