So beheben sie folgendes: randomforest.default(m, y, …): na/nan/inf im aufruf einer fremdfunktion


Ein Fehler, der in R auftreten kann, ist:

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

Dieser Fehler kann aus zwei Gründen auftreten:

  • Der Datensatz enthält NA-, NaN- oder Inf-Werte
  • Eine der Variablen im Datensatz ist ein Zeichen

Der einfachste Weg, diesen Fehler zu beheben, besteht darin, Zeilen mit fehlenden Daten zu entfernen und Zeichenvariablen in Faktorvariablen umzuwandeln:

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

Dieses Tutorial zeigt ein Beispiel dafür, wie dieser Fehler in der Praxis behoben werden kann.

Verwandte Themen: So erstellen Sie zufällige Wälder in R (Schritt für Schritt)

So reproduzieren Sie den Fehler

Angenommen, wir versuchen, eine zufällige Gesamtstruktur an den folgenden Datenrahmen in R anzupassen:

 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)

Wir erhalten eine Fehlermeldung, da x1 eine Zeichenvariable im Datenrahmen ist.

Wir können dies bestätigen, indem wir die Funktion str() verwenden, um die Struktur des Datenrahmens anzuzeigen:

 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

So beheben Sie den Fehler

Um diesen Fehler zu beheben, können wir die Funktion mutate_if() von dplyr verwenden, um jede Zeichenspalte in eine Faktorspalte umzuwandeln:

 library (dplyr)

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

Anschließend können wir das Random-Forest-Modell an den Datenrahmen anpassen:

 #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

Diesmal erhalten wir keine Fehler, da der Datenrahmen keine weiteren Zeichenvariablen enthält.

Zusätzliche Ressourcen

Die folgenden Tutorials erklären, wie Sie andere häufige Fehler in R beheben können:

Lösung: Die Bedingung hat eine Länge > 1 und nur das erste Element wird verwendet
So beheben Sie das Problem in R: dim(X) muss eine positive Länge haben
So beheben Sie in R: Fehlender Wert, bei dem wahr/falsch benötigt wird
So beheben Sie das Problem: Durch Zwang eingeführte NAs

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert