Caret preProcess =“medianImpute”但仍然缺少值错误

时间:2018-05-10 14:08:16

标签: r r-caret

我使用插入符号拟合模型,我有一些缺失的数据。我记得一次在传递参数之前训练“preProcess =”medianImpute“然而我收到了一个意想不到的错误:

library(caret)
x <- mtcars
x[1:5, "cyl"] <- c(NA, NA, NA, NA, NA)

mod.mt <- train(
  mpg ~.,
  method = "rpart", # decision tree
  tuneLength = 3,
  preProcess = "medianImpute",
  data = x)

给出:

Error in na.fail.default(list(mpg = c(21, 21, 22.8, 21.4, 18.7, 18.1,  : 
  missing values in object

因为我正在使用preProcess,我以为我告诉我们使用中位数估算任何缺失值。所以这个错误出乎意料吗?

1 个答案:

答案 0 :(得分:4)

预处理代码仅在x是简单矩阵或数据帧时才有效。使用具有公式界面的火车时基本不起作用。

以下代码有效。或者首先preProcespredict然后train(代码的第二部分)。

mod.mt <- train(
  x = x[,2:10],
  y = x$mpg,
  method = "rpart", # decision tree
  tuneLength = 3,
  preProcess = "medianImpute"
  )

# first impute / predict 
d <- preProcess(x, "medianImpute")
x1 <- predict(d, x)

mod.mt <- train(
  mpg ~.,
   data = x1,
  method = "rpart", # decision tree
  tuneLength = 3
)