partykit has a .list.rules.party() function, which is currently not supported, but can be used to accomplish what you want to do. The main reason that we have not exported it yet is that its output type may change in future versions.
To get the predictions described above, you can do:
pathpred <- function(object, ...) { ## coerce to "party" object if necessary if(!inherits(object, "party")) object <- as.party(object) ## get standard predictions (response/prob) and collect in data frame rval <- data.frame(response = predict(object, type = "response", ...)) rval$prob <- predict(object, type = "prob", ...) ## get rules for each node rls <- partykit:::.list.rules.party(object) ## get predicted node and select corresponding rule rval$rule <- rls[as.character(predict(object, type = "node", ...))] return(rval) }
Illustration using iris and rpart() data:
library("rpart") library("partykit") rp <- rpart(Species ~ ., data = iris) rp_pred <- pathpred(rp) rp_pred[c(1, 51, 101), ] ## response prob.setosa prob.versicolor prob.virginica ## 1 setosa 1.00000000 0.00000000 0.00000000 ## 51 versicolor 0.00000000 0.90740741 0.09259259 ## 101 virginica 0.00000000 0.02173913 0.97826087 ## rule ## 1 Petal.Length < 2.45 ## 51 Petal.Length >= 2.45 & Petal.Width < 1.75 ## 101 Petal.Length >= 2.45 & Petal.Width >= 1.75
(Here, for brevity, only the first observation of each species is shown, which corresponds to indices 1, 51, and 101).
And with ctree() :
ct <- ctree(Species ~ ., data = iris) ct_pred <- pathpred(ct) ct_pred[c(1, 51, 101), ]