in R: Fehler ist.Daten.frame(data) : object " nicht gefunden, C5.0 Grundstück
Diese Frage ist ähnlich wie einige andere Fragen auf Stackoverflow (hier, hier und hier), aber unterschiedlich genug, so dass ich nicht extrapolieren diese Antworten zu meinem Fall.
Ich habe eine Funktion, in der ich einen C5.0-Modell und, als zu versuchen, plot-Modell.
train_d <- globald[train_ind,c(features,21)]
model <- C5.0(binclass ~ .,data=train_d,trials=10)
binclass
ist eine Spalte name in meinem training/test data (globald ist ein dataframe von denen ich die Teilmenge von Zeilen mit _ind
Indizes und Spalten c(3:12,21)
, wo Spalte 21 ist benannt binclass
). Montage gut funktioniert. Allerdings, wenn ich auch fügen Sie die Zeile
plot(model,trial=0)
dann bekomme ich die folgende Fehlermeldung: Error in is.data.frame(data) : object 'train_d' not found
.
Wie ist es möglich, dass bei der Montage das Modell, die train_d
gefunden und richtig eingesetzt, aber beim Plotten, train_d
ist nirgends zu finden? Und, irgendeine Idee, wie dieses Problem zu lösen. Namespaces in [r], bleibt mir ein Rätsel.
Einem minimal-Beispiel ist das folgende:
f <- function(){
library(C50)
set.seed(1)
class = c(1,2)
d <- data.frame(feature1 = sample(1:10,10,replace=TRUE), feature2 = 1:10, binclass = class)
d$binclass <- as.factor(d$binclass)
model <- C5.0(binclass ~ ., data=d)
plot(model)
}
Aufrufen f()
Ergebnisse in die folgende Fehlermeldung: Error in is.data.frame(data) : object 'd' not found
Bearbeiten:
Wie pro die Antwort von MrFlick, es scheint, dass die Ursache des Problems ist ein Fehler in der C5.0-code. Es gibt einige workarounds sind gekennzeichnet durch Pascal und MrFlick.
Das klingt nicht wie ein namespace Problem, so viel als möglich den Umfang Problem. Aber es ist nicht sehr klar aus den Informationen, die Sie zur Verfügung gestellt. Sollten Sie auch ein reproduzierbare Beispiel machen Sie deutlich, was genau Sie tun.
ein minimal lauffähiges Beispiel zur Verfügung. Ich weiß nicht, ob es ist ein namespace ein scope Problem. Es ist ein Problem, das ich sehen wollen gelöst...
Nicht sicher, es ist das beste zu tun, aber es funktioniert, wenn Sie hinzufügen
assign("d", d, .GlobalEnv)
nach d$binclass <- as.factor(d$binclass)
.Dies scheint eine ziemlich drakonische Maßnahme. Aber hey, es funktioniert!
InformationsquelleAutor user989762 | 2015-07-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint tatsächlich ein bug im code, wenn es um die Bewertung der Befehl in der richtigen Umgebung. Das problem scheint in der
C50::model.frame.C5.0
Funktion. Die "sauberste" Arbeit rund um die ich finden konnte, war, fügen Sie eineterms
Eigenschaft zu Ihrem Modell. Dies wird helfen Kapseln die Funktion Umfeld.InformationsquelleAutor MrFlick
@MrFlick fast hatte es aber nicht ganz. Das problem für die Auswertung ist besonders ärgerlich, wenn Sie versuchen zu übergeben, beliebige Daten-und Ziel-features zu die C50-Methode. Wie bereits von MrFlick es hatte damit zu tun, die Umbenennung von Begriffen. Durch die Umbenennung der x-und y-Bedingungen beim Aufruf der Methode der Plot-Funktion wird nicht verwirrt.
Zum Beispiel, hier ist eine Methode für die übergabe in beliebige Daten-und ein Ziel-feature und immer noch in der Lage plot das Ergebnis:
Dem Modell-Objekt zurückgegeben, die von der oben beschriebenen Methode aufgetragen werden kann als normal.
InformationsquelleAutor Cybernetic
Können Sie die spezielle Zuweisung operator <<- anstelle des standard - (<-). Es wird speichern Sie das Objekt um die Globale Umwelt und das kann Ihr problem lösen.
InformationsquelleAutor user10854911