R: Losowy las wyrzucający NaN / Inf w błędzie „wywołanie funkcji zagranicznej” pomimo braku NaN w zbiorze danych [zamknięte]

29

Używam karetki, aby uruchomić sprawdzony krzyżowo losowy las w zbiorze danych. Zmienna Y jest czynnikiem. W moim zestawie danych nie ma NaN, Inf ani NA. Jednak podczas uruchamiania losowego lasu dostaję

Error in randomForest.default(m, y, ...) : 
  NA/NaN/Inf in foreign function call (arg 1)
In addition: There were 28 warnings (use warnings() to see them)
Warning messages:
1: In data.matrix(x) : NAs introduced by coercion
2: In data.matrix(x) : NAs introduced by coercion
3: In data.matrix(x) : NAs introduced by coercion
4: In data.matrix(x) : NAs introduced by coercion

Czy ktoś ma pomysły, czy ten błąd jest spowodowany przez NA wprowadzony przez przymus? Jeśli tak, jak mogę zapobiec takiemu przymusowi?

Info5ek
źródło

Odpowiedzi:

36

W zestawie treningowym muszą znajdować się pewne funkcje z klasą „char”.

Proszę to sprawdzić

> a <- c("1", "2",letters[1:5], "3")
> as.numeric(a)
[1]  1  2 NA NA NA NA NA  3
Warning message:
NAs introduced by coercion 
Pankaj Sharma
źródło
Wystarczy dodać - jeśli funkcja jest rzeczywiście kategoryczna, można ją nadal włączyć, konwertując ją na czynnik, np. bla <-as.factor (bla)
P.Windridge
14

Prawdopodobnie przyczyną jest to, że masz pewne zmienne znakowe w ramce danych.

Konwertuj wszystkie zmienne znakowe na czynniki w jednym wierszu:

library(dplyr) data_fac=data_char %>% mutate_if(is.character, as.factor)

pablo_sci
źródło
2
Nie myślałem o użyciu mutate_if()do tego ... dzięki!
Andrew Brēza
3

Jak pokazano w ostrzeżeniu, wystąpiło 28 błędów, którymi była liczba kolumn z typami danych znaków („chr”). Zmuszenie tych kolumn do czynników pozwoliło na rozpoczęcie biegu.

Info5ek
źródło