【发布时间】:2016-05-02 00:48:58
【问题描述】:
我是 R 新手,我正在尝试使用 party:ctree 库的分类决策树。一切似乎都很好。我得到了预期的结果和一个很好的描述情节。
现在,如果我想从拟合摘要中提取结果,我必须遍历每个节点并提取信息。幸运的是,这已经由@baydoganm here 编写。我想扩展这段代码并将结果写入dataframe 而不是打印出来。
可重现的代码:
library(party)
ct <- ctree(Species ~ ., data = iris)
traverse <- function(treenode){
if(treenode$terminal){
bas=paste(treenode$nodeID,treenode$prediction)
print(bas) #here the results are printed
return(0)
}
traverse(treenode$left)
traverse(treenode$right)
}
traverse(ct@tree) #function call
这很好,我在控制台上得到了输出。现在,如果我想将结果写入数据框,我就会遇到问题。
到目前为止我尝试了什么:尝试使用可变闭包()写入列表。但不知道如何让它工作。
l <- list()
count = 0
traverse1 <- function(treenode,l){
if((treenode$terminal == T)){
count <<- count + 1
print(count)
node = c(treenode$nodeID)
pred = c(treenode$prediction)
l[[count]] <- data.frame(node,pred) #write results in the dataframe
}
traverse1(treenode$left,l)
traverse1(treenode$right,l)
}
test <- traverse1(ct@tree,l)# function call
我只得到我最后一次调用函数的结果,其余的都是空的
【问题讨论】: