聚会包中的ctree函数 - 如何以简单的方式获取拆分变量的列表

时间:2011-02-22 07:58:13

标签: r decision-tree party

我正在尝试使用ctree获取树的拆分变量列表。

我找到了一种使用psplit获取特定节点的特定拆分变量的方法。但我想在整个树中获得整个拆分变量列表。

有没有简单的方法可以获得它?

2 个答案:

答案 0 :(得分:1)

这将完成工作

SplittedNames <- function(ctemp ) {
  intnodes <- unique(where(ctemp))
  intnodes <- sort(intnodes)
  diffnodes <- seq(1:intnodes[length(intnodes)])
  primenodes <- setdiff(diffnodes,intnodes)
  split.names <- vector()

  for (i in primenodes){
    temp <- unlist(nodes(ctemp,i)[[1]][[5]])
    split.names <- append(split.names, as.character(temp[length(temp)]))
  }

  return(paste(unique(split.names), collapse = ', '))  
}

测试代码:

airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq, controls = ctree_control(maxsurrogate = 3))
SplittedNames(airct)
[1] "Temp, Wind"

答案 1 :(得分:0)

var.ctree<-function(fit){

  require(gdata)

  a<-capture.output(print(fit))  
  a<-a[-c(1:7)]   
  a<-trim(a)   

  v<-character()   
  for(h in 1:length(a)){
    b<-a[h]    
    b<-gsub(") ","q",b)    
    b<-gsub(")","q",b)    
    b<-gsub(" < ","q",b)    
    b<-gsub(" > ","q",b)    
    b<-gsub(" <= ","q",b)    
    b<-gsub(" <= ","q",b)    
    b<-gsub("  weights = ","q",b)    
    v[h]<-unlist(strsplit(b,"q"))[2]    
  }    
  v<-factor(v,levels=names(fit@data@get("input")))    
  v<-v[is.na(v)==FALSE]    
  tabla<-table(v)>0    
  sol<-as.numeric(table(v)>0)    
  names(sol)<-names(tabla)    
  sol    
}