Cara memperbaiki: randomforest.default(m, y, …): na/nan/inf dalam panggilan fungsi asing


Kesalahan yang mungkin Anda temui di R adalah:

 Error in randomForest.default(m, y, ...): 
  NA/NaN/Inf in foreign function call (arg 1)

Kesalahan ini dapat terjadi karena dua alasan:

  • Ada nilai NA, NaN atau Inf dalam dataset
  • Salah satu variabel dalam dataset adalah karakter

Cara termudah untuk memperbaiki kesalahan ini adalah dengan menghapus baris dengan data yang hilang dan mengubah variabel karakter menjadi variabel faktor:

 #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 )

Tutorial ini membagikan contoh cara memperbaiki kesalahan ini dalam praktiknya.

Terkait: Cara Membuat Hutan Acak di R (Langkah demi Langkah)

Bagaimana cara mereproduksi kesalahan tersebut

Misalkan kita mencoba menyesuaikan hutan acak ke bingkai data berikut di 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)

Kami menerima kesalahan karena x1 adalah variabel karakter dalam bingkai data.

Kita dapat mengonfirmasi hal ini dengan menggunakan fungsi str() untuk menampilkan struktur bingkai data:

 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

Bagaimana cara memperbaiki kesalahan tersebut

Untuk memperbaiki kesalahan ini, kita dapat menggunakan fungsi dplyr mutate_if() untuk mengubah setiap kolom karakter menjadi kolom faktor:

 library (dplyr)

#convert each character column to factor
df = df %>% mutate_if(is. character , as. factor )

Kami kemudian dapat menyesuaikan model hutan acak ke bingkai data:

 #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

Kami tidak menerima kesalahan apa pun kali ini karena tidak ada lagi variabel karakter dalam kerangka data.

Sumber daya tambahan

Tutorial berikut menjelaskan cara mengatasi kesalahan umum lainnya di R:

Cara memperbaikinya: kondisi memiliki panjang > 1 dan hanya elemen pertama yang akan digunakan
Cara memperbaikinya di R: dim(X) harus panjangnya positif
Cara memperbaiki di R: nilai hilang di mana diperlukan benar/salah
Cara Memperbaiki: NAS Diperkenalkan oleh Paksaan

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *