R尝试捕获块

时间:2014-11-25 13:47:57

标签: r tree try-catch

我正在尝试在循环中评估树的多个输出参数。但有时树功能会中止。线条如何被try catch块包围?

我为没有“真正的”代码而道歉,但我没有非工作树的例子。这是用于说明当前实现的pseddo代码

for (icol in seq(1,ncol)) {
  cName <-colnames(dt)[icol]
  tdata <- dt[,unique(c(1,2,icol)),with=F]
  nTrues <- sum(rowSums(tdata[,cName,with=F]))
  if (nTrues>0 ) {
    print(paste('processing column',icol,'of',ncol,': ',cName))
    nFac <- table(tdata[,cName,with=F])
    print(nFac)
    treeData <- merge(tdata, maint_data)
    treeData[,c('identifiers'):=NULL]
    fmla <- paste(cName,'~ .')
    if (TRUE) {
      # Recursive Partitioning and Regression Trees
      cat('Recursive Partitioning and Regression Trees (rpart)','\n')
      rtree <- rpart(fmla,data=treeData)  # <-- NEED TRY CATCH HERE...
      print(summary(rtree))
      cat('Confusion matrix for rpart')
      print(table(predict(rtree), treeData[[cName]]))
    }
    flush.console()
  } else {
    print(paste('skipping column',icol,'of',ncol(ci_ratio_before_larger),': ',cName))
  }
}

这是一个似乎有效的修正......

  tryCatch({
    # Recursive Partitioning and Regression Trees
    cat('Recursive Partitioning and Regression Trees (rpart)','\n')
    rtree <- rpart(fmla,data=treeData)
    print(summary(rtree))
    cat('Confusion matrix for rpart')
    print(table(predict(rtree,type='vector'), treeData[[cName]]))
  },
  error = function (condition) {
    print("RPART_ERROR:")
    print(paste("  Message:",conditionMessage(condition)))
    print(paste("  Call: ",conditionCall(condition)))
  }
  )

1 个答案:

答案 0 :(得分:2)

我无法真正测试它,但您可以尝试更换

if (TRUE)

条件:

tryCatch({
  # Recursive Partitioning and Regression Trees
  cat('Recursive Partitioning and Regression Trees (rpart)','\n')
  rtree <- rpart(fmla,data=treeData)  # <-- NEED TRY CATCH HERE...
  print(summary(rtree))
  cat('Confusion matrix for rpart')
  print(table(predict(rtree), treeData[[cName]]))
},
error = function (condition) {
  print("RPART_ERROR:")
  print(paste("  Message:",conditionMessage(condition)))
  print(paste("  Call: ",conditionCall(condition)))
},
finally= function() {

}
)