循环提供几种方法并保存输出

时间:2019-01-17 18:07:02

标签: r r-caret

编辑:实际上查看该方法表明它仅使用一种方法,在给定方法向量的情况下,如何编写循环以选择一种方法?!

我看了几个问题(Loop in R: how to save the outputs?),但似乎无法弄清楚如何保存这些模型的输出。这是我的“功能”:

library(caret)
Control<-trainControl(method="cv",number=5)
metric<-"Accuracy"
modeler<-function(df,yname,xname,method,metric,control){
  df<-df
  methods1<-method
 f1<-as.formula(paste0(yname,"~",xname))
 for(method in methods1){
   fit<-do.call("train",list(data=quote(df),f1,metric=metric,trControl=control,
                             method=method)) 

 }
fit
}

“功能”的实现:

methods1<-c("rf","rpart")
modeler(iris,yname="Species",xname=".",method = methods1,control=Control,
        metric = metric)

现在我可以将上面的内容保存为:

mod1<-modeler(iris,yname="Species",xname=".",method = methods1,control=Control,
        metric = metric)

然后:

sapply(mod1,"[",1)

这有效,但仅返回最后一个模型,而不返回最佳显示。 如何优化此过程?

2 个答案:

答案 0 :(得分:1)

这是关键部分的简要答案。
使用method1和方法的向量一样,可以使用lapply函数:

methods1<-c("rf","rpart")

#use lapply to loop through the methods
#fit will be a list of the results from modeler
fit<-lapply(methods1, function(met) {
  modeler(iris,yname="Species",xname=".",method = met,control=Control, metric = metric)
})

如果计算很耗时,可以很容易地使lapply函数与parallel包并行运行。

答案 1 :(得分:0)

基于@ Dave2e的评论:这是我设法“解决”它的方法:

library(caret)
Control<-trainControl(method="cv",number=5)
metric<-"Accuracy"
modeler<-function(df,yname,xname,method,metric,control){
  df<-df
  methods1<-method
 f1<-as.formula(paste0(yname,"~",xname))
 for(method in methods1){
   fit<-do.call("train",list(data=quote(df),f1,metric=metric,trControl=control,
                             method=methods1)) 

 }
data.frame(fit$results,Type=fit$modelInfo$tags[1])
}

实施:

methods1<-c("rf","rpart")
lapply(methods1, function(met) {modeler(iris,yname="Species",xname=".",
                              method = met,control=Control, metric = metric)})

没有种子的结果:仍然缺少,但是确实可以;

[[1]]
  mtry  Accuracy Kappa AccuracySD    KappaSD          Type
1    2 0.9533333  0.93 0.03800585 0.05700877 Random Forest
2    3 0.9533333  0.93 0.03800585 0.05700877 Random Forest
3    4 0.9533333  0.93 0.03800585 0.05700877 Random Forest

[[2]]
    cp  Accuracy Kappa AccuracySD    KappaSD             Type
1 0.00 0.9533333  0.93 0.02981424 0.04472136 Tree-Based Model
2 0.44 0.7733333  0.66 0.14605935 0.21908902 Tree-Based Model
3 0.50 0.3333333  0.00 0.00000000 0.00000000 Tree-Based Model