我是 R 新手,我正在尝试使用party:ctree
库的分类决策树。一切似乎都很好。我得到了预期的结果和一个很好的描述情节。
现在,如果我想从拟合摘要中提取结果,我必须遍历每个节点并提取信息。幸运的是,这已经由@baydoganm here编写了。我想扩展此代码并将结果写入 adataframe
而不是打印它。
可重现的代码:
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
我只得到最后一次调用函数的结果,其余为空