2016-05-03 20 views
1

I rpart verwenden kann, um vorherzusagen (wie unten),R: rpart: convertng die rpart fit Objekt in eine Funktion

library(rpart) 

datpred <-tail(car.test.frame,10) 
fit <- rpart(Mileage ~ Weight+Price, car.test.frame) 
predict(fit,newdata=datpred) 
plot(fit, uniform=TRUE) 
text(fit, use.n=TRUE, all=TRUE, cex=.8) 
objects(fit) 

Gibt es einen einfachen Weg, um die Passform-Objekte in eine einfache Funktion zu konvertieren, die nur enthalten die Splittungslogik am Dateneingang und gibt dann die Vorhersage aus?

Der Grund dafür ist, dass ich dann die Funktion in einem einzigen Skript haben kann, ohne die passen Objekte aus einer externen Quelle zu laden.

Vielen Dank für Ihre Hilfe.

+0

Ein Zeichenvektor ist kein Objekt fit. Warum würdest du 'vorhersagen' erwarten, um an einem Charaktervektor zu arbeiten? Vielleicht könnten Sie näher erläutern, was Sie vorhaben? –

+0

Vielen Dank für Ihre Einsicht. Ich habe die Frage geändert. –

Antwort

1

Sie können Ihr Objekt in einer Datei speichern mit dput() dann lesen mit dget():

dput(fit, 'fit.dput') 
rm(fit) 
fit <- dget('fit.dput') 
1

Die Ausgabe, die Sie daran interessiert sind, nämlich die Variablennamen und die Werte, bei denen der Baum gespalten ist, sind durch die Funktion labels.rpart montiert:

labels(fit) 
#----------- 
[1] "root"   "Weight>=2568" "Weight>=3088" "Weight< 3088" 
[5] "Weight>=2748" "Weight< 2748" "Weight< 2568" 

Das 'Splits' Element des fit Objekts ist, wo die Trennwerte gespeichert sind (in der Spalte "Index"):

012.351.
> fit$splits 
     count ncat improve index adj 
Weight 60 1 0.5953491 2567.5 0 
Weight 45 1 0.5045118 3087.5 0 
Weight 23 1 0.1476996 2747.5 0 

Sie den Code anschauen können, aber wenn Sie nicht bereits wissen, wie man das macht, dann ist dies keine Funktion, die leicht zu verstehen ist:

> methods(labels) 
[1] labels.default  labels.dendrogram* labels.dist*  
[4] labels.lm*   labels.rpart*  labels.survreg  
[7] labels.terms*  
see '?methods' for accessing help and source code 
> getAnywhere(labels.rpart) 
+0

Danke für die Erklärung –