วิธีแก้ไขในอาร์กิวเมนต์ r: ไม่ใช่ทั้งตัวเลขหรือตรรกะ: return na


คำเตือนที่คุณอาจพบใน R คือ:

 Warning message:
In mean.default(df): argument is not numeric or logical: returning NA

คำเตือนนี้เกิดขึ้นเมื่อพยายามหาค่าเฉลี่ยวัตถุใน R ที่ไม่ใช่ตัวเลขหรือตรรกะ

บทช่วยสอนนี้จะอธิบายวิธีจัดการกับคำเตือนนี้ในทางปฏิบัติอย่างชัดเจน

วิธีทำซ้ำคำเตือน

สมมติว่าเราสร้าง data frame ต่อไปนี้ใน R:

 #create data frame
df <- data. frame (team=c('A', 'B', 'C', 'D', 'E'),
                 points=c(99, 90, 86, 88, 95),
                 assists=c(33, 28, 31, 39, 34),
                 rebounds=c(30, 28, 24, 24, 28))

#view data frame
df

  team points assists rebounds
1 A 99 33 30
2 B 90 28 28
3 C 86 31 24
4 D 88 39 24
5 E 95 34 28

หากเราพยายามหาค่าเฉลี่ยของคอลัมน์ของอักขระ หรือหากเราพยายามหาค่าเฉลี่ยของกรอบข้อมูลทั้งหมด เราจะได้รับคำเตือน:

 #attempt to calculate mean of character column
mean(df$team)

Warning message:
In mean.default(df$team): argument is not numeric or logical: returning NA

#attempt to calculate mean of entire data frame
mean(df)

Warning message:
In mean.default(df): argument is not numeric or logical: returning NA

ฟังก์ชัน Mean() รับเฉพาะเวกเตอร์ตัวเลขเป็นอาร์กิวเมนต์ ซึ่งเป็นสาเหตุที่เราได้รับคำเตือนในทั้งสองสถานการณ์

วิธีจัดการกับคำเตือน

วิธีจัดการกับคำเตือนนี้คือการใช้ฟังก์ชัน Mean() กับเวกเตอร์ตัวเลขเท่านั้น

ตัวอย่างเช่น เราสามารถคำนวณค่าเฉลี่ยของคอลัมน์คะแนนได้เนื่องจากเป็นตัวเลข:

 #calculate mean of points column
mean(df$points)

[1] 91.6

หรือเราอาจใช้ฟังก์ชัน sapply() เพื่อคำนวณค่าเฉลี่ยของแต่ละคอลัมน์ในกรอบข้อมูล:

 #calculate mean of every column in data frame
sapply(df, mean, 2)

    team points assists rebounds 
      NA 90 33 28 

Warning message:
In mean.default(X[[i]], ...):
  argument is not numeric or logical: returning NA

เราสามารถคำนวณค่าเฉลี่ยของแต่ละคอลัมน์ตัวเลขได้ แต่ยังคงได้รับข้อความเตือนเนื่องจากเราพยายามคำนวณค่าเฉลี่ยของคอลัมน์อักขระ “ทีม”

เพื่อหลีกเลี่ยงคำเตือนนี้โดยสิ้นเชิง เราสามารถใช้ฟังก์ชัน sapply() กับคอลัมน์ตัวเลขสามคอลัมน์เท่านั้น:

 #calculate mean of each numeric column
sapply(df[c(' points ', ' assists ', ' rebounds ')], mean, 2)
  points assists rebounds 
      90 33 28

โปรดทราบว่าค่าเฉลี่ยของแต่ละคอลัมน์ตัวเลขจะแสดงสำเร็จ และเราไม่ได้รับข้อความเตือนใดๆ

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

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

วิธีแก้ไข: เงื่อนไขมีความยาว > 1 และระบบจะใช้เฉพาะองค์ประกอบแรกเท่านั้น
วิธีแก้ไข: อาร์กิวเมนต์ที่ไม่ใช่ตัวเลขของตัวดำเนินการไบนารี
วิธีแก้ไข: dim(X) ต้องมีความยาวเป็นค่าบวก
วิธีแก้ไข: ข้อผิดพลาดในการเลือกอาร์กิวเมนต์ที่ไม่ได้ใช้

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

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