วิธีแก้ไข: randomforest.default(m, y, …): na/nan/inf ในการเรียกใช้ฟังก์ชันต่างประเทศ
ข้อผิดพลาดที่คุณอาจพบใน R คือ:
Error in randomForest.default(m, y, ...): NA/NaN/Inf in foreign function call (arg 1)
ข้อผิดพลาดนี้อาจเกิดขึ้นได้จากสองสาเหตุ:
- ในชุดข้อมูลจะมีค่า NA, NaN หรือ Inf
- หนึ่งในตัวแปรในชุดข้อมูลคืออักขระ
วิธีที่ง่ายที่สุดในการแก้ไขข้อผิดพลาดนี้คือการลบแถวที่มีข้อมูลที่ขาดหายไปและแปลงตัวแปรอักขระเป็นตัวแปรตัวประกอบ:
#remove rows with missing values df <- na. omitted (df) #convert all character variables to factor variables library (dplyr) df %>% mutate_if(is. character , as. factor )
บทช่วยสอนนี้จะแชร์ตัวอย่างวิธีแก้ไขข้อผิดพลาดนี้ในทางปฏิบัติ
ที่เกี่ยวข้อง: วิธีสร้างป่าสุ่มใน R (ทีละขั้นตอน)
วิธีการทำซ้ำข้อผิดพลาด
สมมติว่าเรากำลังพยายามปรับฟอเรสต์แบบสุ่มให้พอดีกับกรอบข้อมูลต่อไปนี้ใน R:
library (randomForest)
#create data frame
df <- data. frame (y <- c(30, 29, 30, 45, 23, 19, 9, 8, 11, 14),
x1 <- c('A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C'),
x2 <- c(4, 4, 5, 7, 8, 7, 9, 6, 13, 15))
#attempt to fit random forest model
model <- randomForest(formula = y ~ ., data = df)
Error in randomForest.default(m, y, ...):
NA/NaN/Inf in foreign function call (arg 1)
เราได้รับข้อผิดพลาดเนื่องจาก x1 เป็นตัวแปรอักขระในกรอบข้อมูล
เราสามารถยืนยันสิ่งนี้ได้โดยใช้ฟังก์ชัน str() เพื่อแสดงโครงสร้างของกรอบข้อมูล:
str(df)
'data.frame': 10 obs. of 3 variables:
$ y....c.30..29..30..45: num 30 29 30 45 23 19 9 8 11 14
$ x1....c..A....A....B....B.... : chr "A" "A" "B" "B"
$ x2....c.4..4..5..7..: num 4 4 5 7 8 7 9 6 13 15
วิธีการแก้ไขข้อผิดพลาด
เพื่อแก้ไขข้อผิดพลาดนี้ เราสามารถใช้ฟังก์ชัน mutate_if() ของ dplyr เพื่อแปลงคอลัมน์อักขระแต่ละตัวให้เป็นคอลัมน์ตัวประกอบได้:
library (dplyr)
#convert each character column to factor
df = df %>% mutate_if(is. character , as. factor )
จากนั้นเราสามารถใส่โมเดลฟอเรสต์แบบสุ่มเข้ากับกรอบข้อมูลได้:
#fit random forest model
model <- randomForest(formula = y ~ ., data = df)
#view summary of model
model
Call:
randomForest(formula = y ~ ., data = df)
Type of random forest: regression
Number of trees: 500
No. of variables tried at each split: 1
Mean of squared residuals: 65.0047
% Var explained: 48.64
เราไม่ได้รับข้อผิดพลาดใดๆ ในครั้งนี้เนื่องจากไม่มีตัวแปรอักขระใน dataframe อีกต่อไป
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้อธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่น ๆ ใน R:
วิธีแก้ไข: เงื่อนไขมีความยาว > 1 และระบบจะใช้เฉพาะองค์ประกอบแรกเท่านั้น
วิธีแก้ไขใน R: dim(X) ต้องมีความยาวเป็นบวก
วิธีแก้ไขใน R: ค่าหายไปโดยจำเป็นต้องมีค่าจริง/เท็จ
วิธีแก้ไข: NAs ถูกแนะนำโดย Coercion