Saving decision tree's output into a text file

5.2k views Asked by At

I'm looking for a method to save decision tree's output in R. Here is a simple decision tree code in R:

library(rpart)
data(kyphosis)
fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)

and here is the value of fit:

1) root 81 17 absent (0.79012346 0.20987654)  
   2) Start>=8.5 62  6 absent (0.90322581 0.09677419)  
     4) Start>=14.5 29  0 absent (1.00000000 0.00000000) *
     5) Start< 14.5 33  6 absent (0.81818182 0.18181818)  
      10) Age< 55 12  0 absent (1.00000000 0.00000000) *
      11) Age>=55 21  6 absent (0.71428571 0.28571429)  
        22) Age>=111 14  2 absent (0.85714286 0.14285714) *
        23) Age< 111 7  3 present (0.42857143 0.57142857) *
   3) Start< 8.5 19  8 present (0.42105263 0.57894737) *

I tried save, dump and dput but they do not work and change tree's format. Is there any method to save the tree into a text file keeping its? sink does not work for me.

2

There are 2 answers

0
Ricky On BEST ANSWER

I used sink and it worked for me.

sink("clipboard")  # works in Windows, substitute "clipboard" for file name
print(fit)
sink()

Pasting from clipboard, I get

n= 81 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

 1) root 81 17 absent (0.79012346 0.20987654)  
   2) Start>=8.5 62  6 absent (0.90322581 0.09677419)  
     4) Start>=14.5 29  0 absent (1.00000000 0.00000000) *
     5) Start< 14.5 33  6 absent (0.81818182 0.18181818)  
      10) Age< 55 12  0 absent (1.00000000 0.00000000) *
      11) Age>=55 21  6 absent (0.71428571 0.28571429)  
        22) Age>=111 14  2 absent (0.85714286 0.14285714) *
        23) Age< 111 7  3 present (0.42857143 0.57142857) *
   3) Start< 8.5 19  8 present (0.42105263 0.57894737) *

Tested changing "clipboard" to a text file name, and had the same content above.

Am wondering about your comment that sink didn't work for you, what was the problem / output?

1
Henry On

save() and load() should work if you want to preserve fit for future use. Experiment with something like

is.list(fit)                       # check it is there 
save(fit,file="thisexample.txt", ascii=TRUE)
rm(fit)                            # to remove fit object
is.list(fit)                       # check it is not there
load(file="thisexample.txt")
is.list(fit)                       # check it is there

You should see [1] TRUE then Error: object 'fit' not found then [1] TRUE and you will be good to go on using fit

I may have misunderstood what you are trying to save, in which case use Ricky's answer instead, with a file name

sink("exampletree.txt")
print(fit)
sink()