我必须以交互模式绘制决策树,我可以在JavaScript中绘制,但为了做到这一点,我需要Json格式的rpart对象。
所以我想使用一些库将rpart输出转换为JSON格式。
model <- rpart(formula=Species~Sepal.Length+Sepal.Width+Petal.Length+
Petal.Width,data=iris,na.action = na.rpart, method = "class",
parms = list(split="gini"),
control = rpart.control(minsplit= 10, cp= 0.005))
print(model)
输出
n= 150
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)
2) PetalLength< 2.45 50 0 setosa (1.00000000 0.00000000 0.00000000) *
3) PetalLength>=2.45 100 50 versicolor (0.00000000 0.50000000 0.50000000)
6) PetalWidth< 1.75 54 5 versicolor (0.00000000 0.90740741 0.09259259)
12) PetalLength< 4.95 48 1 versicolor (0.00000000 0.97916667 0.02083333) *
13) PetalLength>=4.95 6 2 virginica (0.00000000 0.33333333 0.66666667) *
7) PetalWidth>=1.75 46 1 virginica (0.00000000 0.02173913 0.97826087) *
任何人都可以告诉我如何将rpart对象转换为Json?
提前感谢您的帮助!
答案 0 :(得分:3)
我们可以使用递归函数手动编写JSON解析器。这是一个小例子。请注意以下内容;
编写解析器对于“派对”对象比对“rpart”对象更容易。幸运的是,我们可以使用as.party()
这只是一个显示功能的简单实现。我们可以在每个节点添加其他功能,如node_size,node_parent等。
install.packages('partykit')
json_prsr <- function(tree, node = 1, node_stats = NULL){
# Checking the decision tree object
if(!is(tree, c("constparty","party")))
tree <- partykit::as.party(tree)
# Parsing into json format
str <- ""
rule <- partykit:::.list.rules.party(tree, node)
if(is.null(node_stats))
node_stats <- table(tree$fitted[1])
children <- partykit::nodeids(tree, node)
if (length(children) == 1) {
ct <- node_stats[as.character(children)]
str <- paste("{","'name': '",children,"','size':",ct,",'rule':'",rule,"'}", sep='')
} else {
str <- paste("{","'name': '", node,"', 'rule': '", rule, "', 'children': [", sep='')
for(child in children){
check <- paste("{'name': '", child, "'", sep='')
if(child != node & ( !grepl(check, str, fixed=TRUE) ) ) {
child_str <- json_prsr(tree, child, node_stats)
str <- paste(str, child_str, ',', sep='')
}
}
str <- substr(str, 1, nchar(str)-1) #Remove the comma
str <- paste(str,"]}", sep='')
}
return(str)
}