วิธีแก้ไข: ข้อผิดพลาดใน lm.fit(x, y, offset = offset, …): na/nan/inf ใน 'y'


ข้อผิดพลาดที่คุณอาจพบเมื่อใช้ R คือ:

 Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): 
  NA/NaN/Inf in 'y'

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพยายามใช้ฟังก์ชัน lm() เพื่อให้พอดีกับโมเดลการถดถอยเชิงเส้นใน R แต่ตัวแปรทำนายหรือการตอบสนองมีค่า NaN หรือ Inf

ตัวอย่างต่อไปนี้แสดงวิธีการแก้ไขข้อผิดพลาดนี้ในทางปฏิบัติ

วิธีการทำซ้ำข้อผิดพลาด

สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R ซึ่งมีข้อมูลเกี่ยวกับนาทีที่เล่นและคะแนนที่ทำได้โดยผู้เล่นบาสเก็ตบอลหลายคน:

 #create data frame with some NA, NaN, Inf values
df <- data. frame (minutes=c(4, NA, 28, 12, 30, 21, 14),
                 dots=c(12, NaN, 30, Inf, 43, 25, 17))

#view data frame
df

  minutes points
1 4 12
2 NA NaN
3 28 30
4 12 Lower
5 30 43
6 21 25
7 14 17

โปรดทราบว่ากรอบข้อมูลมีค่า NaN และ Inf

ตอนนี้ สมมติว่าเรากำลังพยายามปรับโมเดลการถดถอยเชิงเส้นโดยใช้ “นาที” เป็นตัวแปรทำนายและ “คะแนน” เป็นตัวแปรตอบสนอง:

 #attempt to fit regression model
lm(points ~ minutes, data=df)

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): 
  NA/NaN/Inf in 'y'

เราได้รับข้อผิดพลาดเนื่องจากค่า NaN และ Inf มีอยู่ในกรอบข้อมูล

วิธีการแก้ไขข้อผิดพลาด

ควรสังเกตว่าค่า NA ในกรอบข้อมูลไม่ใช่ปัญหา ในความเป็นจริง R เพียงละเว้นค่า NA เมื่อปรับโมเดลการถดถอยเชิงเส้นให้เหมาะสม

ปัญหาที่แท้จริงเกิดจากค่า NaN และ Inf

วิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้คือการแทนที่ค่า NaN และ Inf ด้วยค่า NA :

 #Replace NaN & Inf with NA
df[is. na (df) | df==" Inf "] = NA

#view updated data frame
df

  minutes points
1 4 12
2 NA NA
3 28 30
4 12 NA
5 30 43
6 21 25
7 14 17

ตอนนี้เราสามารถปรับโมเดลการถดถอยได้:

 #fit regression model
lm(points ~ minutes, data=df)

Call:
lm(formula = points ~ minutes, data = df)

Coefficients:
(Intercept) minutes  
      5,062 1,048

ผลลัพธ์จะแสดง ค่าสัมประสิทธิ์ ของแบบจำลองการถดถอย

โปรดทราบว่าเราไม่ได้รับข้อผิดพลาดใดๆ เนื่องจากเราแทนที่ค่า NaN และ Inf ในกรอบข้อมูล

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่น ๆ ใน R:

วิธีแก้ไขใน R: ค่าคงที่สตริงที่ไม่คาดคิด
วิธีแก้ไขใน R: สูตรเทมเพลตไม่ถูกต้องใน ExtractVars
วิธีแก้ไขในอาร์กิวเมนต์ R: ไม่ใช่ทั้งตัวเลขหรือตรรกะ: return na

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

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