使用测试集中的新因子级别进行回归 - 如何优雅地忽略错误

时间:2016-02-16 06:40:43

标签: r error-handling regression random-forest categorical-data

无论如何,R还是优雅的'当测试集中有新的因子水平时,忽略通常会完全导致预测崩溃的错误?通常,如果只有1个坏值,则整个操作不会出现这种情况。工作

如果存在有效值,那么预测会发生,但是当有新的因子水平时会出现错误?

非常糟糕的例子,但......这就是我在

获得的
  library(randomForest)
  df=mtcars
  df$vs=99
  df[1,8]=0  # vs column
  df$vs=factor(df$vs)
  mtcars$vs=factor(mtcars$vs)

  fit=lm(mpg~., data=mtcars)
   # fit above works with explanation given below, but fit2 fails with randomforest?  why?
  fit2 = randomForest(mpg~., data=mtcars)
   df$help=predict(fit, df)   #  first row should work others should error gracefully maybe with a NA?

我得到的第一反应很棒。但是,对于上面使用randomForest的不那么简单的例子,它仍然失败。

1 个答案:

答案 0 :(得分:3)

您可以在预测时使用tryCatch返回NA

对于单行:

tryCatch(predict(fit, bad_df[1,]), 
                           error=function(e) NA))

对于所有行:

sapply(1:nrow(bad_df), 
           function(i) 
               tryCatch(predict(fit, bad_df[i,]), 
                           error=function(e) NA))

另一种方法是更改​​数据集。基本上,数据集中与您的fit对象不匹配的因素设置为NA

for(i in 1:length(fit$xlevels)) {
  bad_values = which(!(bad_df[,names(fit$xlevels)[i]] %in% fit$xlevels[[i]]))
  bad_df[, bad_values] = NA
}