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