读取多个rds模型并在lapply中使用预测功能?

时间:2019-05-23 05:58:42

标签: r mlr

在读取所有模型后,我将一堆模型另存为.rds,并在测试数据上循环使用了预测函数,显示了预测方法上的错误,但是使用单个模型是可行的。 (模型是使用mlr包构建的)

我从一个文件夹中读取所有模型,并对测试数据使用lapply,

files = list.files(path = 'C:/rf_models', pattern = '\\.rds$', full.names = TRUE)
read_models <- do.call("rbind", lapply(files, readRDS))
print(lapply(read_models, function (x) predict(x, newdata = as.data.frame(test_data))))

其显示在错误下方,并在控制台中打开浏览[1]>

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('FilterWrapper', 'BaseWrapper', 'Learner')"
Called from: predict(x, newdata = as.data.frame(test_data))
Browse[1]>

即使我使用for循环

for (i in 1:80){
  pred_models <- predict(read_models[[i]], newdata = as.data.frame(test_data))
}

也显示

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('FilterWrapper', 'BaseWrapper', 'Learner')"

所有操作都在我已经加载了mlr库的同一R脚本中完成

如果我单独阅读模型,则可以正常工作

model <- readRDS("C:/rf_models/rf_models_31.rds")
prediction <- predict(model, newdata = as.data.frame(test_data))
prediction
Prediction: 1 observations
predict.type: prob
threshold: 0=0.50,1=0.50
time: 0.03
  truth prob.0 prob.1 response
1     0   0.12   0.88        1

我希望pred_models可以存储所有预测。

1 个答案:

答案 0 :(得分:0)

仅使用有效的文件名进行加载

files = list.files(path = 'C:/rf_models', pattern = '.rds$', full.names = TRUE)
for (i in 1:80){
  model <- readRDS(files[i])
  prediction <- predict(model, newdata = as.data.frame(test_data))
  print(prediction)
}