# [R] bug in residuals.rpart?

Kevin Murphy murphyk at cs.berkeley.edu
Tue Jul 24 03:00:31 CEST 2001

```The following code

tr <- rpart(Y ~ ., dat, method="class")
dev <- residuals(tr, "deviance")

produces the following error

Error in log(x) : Non-numeric argument to mathematical function

> .Traceback
[[1]]
[1] "log(yhat)" # line 588 of rpart

[[2]]
[1] "switch(type, usual = as.integer(y != yhat), pearson = (1 -
yhat)/yhat, "
[2] "    deviance = -2 *
log(yhat))"

[[3]]
[1] "residuals.rpart(tr, \"deviance\")"

[[4]]
[1] "residuals(tr, \"deviance\")"

The problem is that tr\$frame does not contain a field called 'yprob'.

I created the dat matrix above as follows

set.seed(123)
Nvars <- 4;
Nsamples <- 1000;
N <- Nvars*Nsamples;
dat <- matrix(sample(1:2, N, c(0.5,0.5), replace=TRUE), Nsamples, Nvars)
#dat <- sample.bnet(bnet, 30)
dat <- as.data.frame(dat)
for (i in 1:Nvars) {
dat[,i]<- factor(dat[,i], 1:2)
}
names(dat) <- c(paste("X", 1:3, sep=""), "Y")

This is the tree it learned

1) root 1000 493 1 (0.5070000 0.4930000)
2) X2=1 485 221 1 (0.5443299 0.4556701) *
3) X2=2 515 243 2 (0.4718447 0.5281553) *

This also happens if the distribution  generating 'dat' is not uniform
(e.g., sampled from a Bayes net, so the tree is "more interesting"),
although mysteriously rpart seems to work on MASS/cpus.

Kevin
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```