วิธีแก้ไข: ข้อผิดพลาดใน do_one (nmeth): na/nan/inf ในการเรียกใช้ฟังก์ชันต่างประเทศ (arg 1)
ข้อผิดพลาดที่คุณอาจพบใน R คือ:
Error in do_one(nmeth): NA/NaN/Inf in foreign function call (arg 1)
ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพยายามดำเนินการจัด กลุ่มแบบเคมีนใน R แต่กรอบข้อมูลที่คุณใช้มีค่าหายไปอย่างน้อยหนึ่งค่า
บทช่วยสอนนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดนี้อย่างชัดเจน
วิธีการทำซ้ำข้อผิดพลาด
สมมติว่าเรามีกรอบข้อมูลต่อไปนี้ใน R โดยมีค่าหายไปในแถวที่สอง:
#create data frame df <- data. frame (var1=c(2, 4, 4, 6, 7, 8, 8, 9, 9, 12), var2=c(12, 14, 14, 8, 8, 15, 16, 9, 9, 11), var3=c(22, NA, 23, 24, 28, 23, 19, 16, 12, 15)) row. names (df) <- LETTERS[1:10] #view data frame df var1 var2 var3 At 2 12 22 B 4 14 NA C 4 14 23 D 6 8 24 E 7 8 28 F 8 15 23 G 8 16 19 H 9 9 16 I 9 9 12 D 12 11 15
หากเราพยายามใช้ฟังก์ชัน kmeans() เพื่อดำเนินการจัดกลุ่มเคมีนบนกรอบข้อมูลนี้ เราจะได้รับข้อผิดพลาด:
#attempt to perform k-means clustering with k = 3 clusters km <- kmeans(df, centers = 3 ) Error in do_one(nmeth): NA/NaN/Inf in foreign function call (arg 1)
วิธีการแก้ไขข้อผิดพลาด
วิธีที่ง่ายที่สุดในการแก้ไขข้อผิดพลาดนี้คือการใช้ฟังก์ชัน na.omit() เพื่อลบแถวที่มีค่าหายไปออกจากกรอบข้อมูล:
#remove rows with NA values df <- na. omitted (df) #perform k-means clustering with k = 3 clusters km <- kmeans(df, centers = 3) #view results km K-means clustering with 3 clusters of sizes 4, 3, 2 Cluster means: var1 var2 var3 1 5.5 14.250000 21.75000 2 10.0 9.666667 14.33333 3 6.5 8.000000 26.00000 Vector clustering: ACDEFGHIJ 1 1 3 3 1 1 2 2 2 Within cluster sum of squares by cluster: [1] 46.50000 17.33333 8.50000 (between_SS / total_SS = 79.5%) Available components: [1] "cluster" "centers" "totss" "withinss" "tot.withinss" [6] "betweenss" "size" "iter" "ifault"
โปรดทราบว่าอัลกอริธึมการจัดกลุ่ม k-means ทำงานสำเร็จเมื่อเราลบแถวที่มีค่าที่ขาดหายไปออกจากกรอบข้อมูล
โบนัส: คำแนะนำทีละขั้นตอนโดยละเอียดเกี่ยวกับการจัดกลุ่ม k-mean ใน R
แหล่งข้อมูลเพิ่มเติม
วิธีแก้ไขใน R: NAs ที่ถูกบังคับโดยการบังคับ
วิธีซ่อมแซมใน R: ดัชนีอยู่นอกขอบเขต
วิธีแก้ไขใน R: ความยาวของวัตถุที่ยาวกว่าไม่ใช่ผลคูณของความยาวของวัตถุที่สั้นกว่า