Oplossing: randomforest.default(m, y, …): na/nan/inf in externe functieaanroep


Een fout die je tegen kunt komen in R is:

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

Deze fout kan om twee redenen optreden:

  • Er zijn NA-, NaN- of Inf-waarden in de dataset
  • Eén van de variabelen in de dataset is een teken

De eenvoudigste manier om deze fout op te lossen is door rijen met ontbrekende gegevens te verwijderen en tekenvariabelen naar factorvariabelen te converteren:

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

In deze tutorial wordt een voorbeeld gegeven van hoe u deze fout in de praktijk kunt oplossen.

Gerelateerd: Willekeurige bossen maken in R (stap voor stap)

Hoe de fout te reproduceren

Stel dat we proberen een willekeurig bos in het volgende dataframe in R te passen:

 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)

We ontvangen een foutmelding omdat x1 een tekenvariabele is in het dataframe.

We kunnen dit bevestigen door de functie str() te gebruiken om de structuur van het dataframe weer te geven:

 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

Hoe u de fout kunt oplossen

Om deze fout op te lossen, kunnen we de functie mute_if() van dplyr gebruiken om elke tekenkolom naar een factorkolom te converteren:

 library (dplyr)

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

We kunnen dan het willekeurige bosmodel aanpassen aan het dataframe:

 #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

Deze keer ontvangen we geen fouten omdat er geen karaktervariabelen meer in het dataframe aanwezig zijn.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in R kunt oplossen:

Oplossing: voorwaarde heeft lengte > 1 en alleen het eerste element wordt gebruikt
Hoe op te lossen in R: dim(X) moet een positieve lengte hebben
Hoe op te lossen in R: ontbrekende waarde waar waar/onwaar nodig is
Oplossing: NA’s geïntroduceerd door dwang

Einen Kommentar hinzufügen

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