我似乎找不到一个有效的答案,但本质上,我正在循环处理我创建的模型,并希望输出模型的准确性以及模型的名称,如下所示:
accuracy_data <- function(model_prediction,model_name){ confmat <- confusionMatrix(model_prediction, test_data$DEATH_EVENT) accuracy_results <- round(confmat$overall[["Accuracy"]]*100, digits=2) print(paste(model_name," - ",accuracy_results,"%",sep="")) } pred_list <- list(log_pred,knn_pred,svm_pred,non_svm_pred,tree_pred,rf_pred,gbm_pred,xgb_pred,nn_pred) for(predic in pred_list){ accuracy_data(predic,"Model Name") }
输出如下:
[1] "Model Name - 83.05%"[1] "Model Name - 86.44%"[1] "Model Name - 83.05%"[1] "Model Name - 83.05%"[1] "Model Name - 86.44%"[1] "Model Name - 84.75%"[1] "Model Name - 91.53%"[1] "Model Name - 89.83%"[1] "Model Name - 86.44%"
我找不到一种方法来用每个模型的名称替换“Model Name”。有没有简单的方法来做到这一点?无论是使用pred_list的名称还是其他方法?
任何建议将不胜感激。在询问之前,我确实已经在谷歌和这里搜索过了,但没有成功!
另外还有一个额外的问题 – 有没有一种方法可以将这些结果输出到某种表格或数组中,而不是像现在这样?(如果这应该是一个单独的问题,请原谅)
回答:
我们可以创建一个named
列表,使用list(log__pred = log_pred, ...)
,或者更简单地使用dplyr::lst
或purrr::lst
pred_list <- dplyr::lst(log_pred, knn_pred, svm_pred, non_svm_pred, tree_pred, rf_pred, gbm_pred, xgb_pred, nn_pred)
然后,循环处理’pred_list’的names
for(nm in names(pred_list)){ accuracy_data(pred_list[[nm]], nm) }
关于输出,它只是print
,即没有返回值。如果我们需要创建一个对象,那么在函数内部我们可以将print
更改为返回一个输出
accuracy_data <- function(model_prediction,model_name){ confmat <- confusionMatrix(model_prediction, test_data$DEATH_EVENT) accuracy_results <- round(confmat$overall[["Accuracy"]]*100, digits=2) return(paste(model_name," - ",accuracy_results,"%",sep="")) }
然后创建一个vector
来存储输出并追加输出
out <- c()for(nm in names(pred_list)) { out <- c(out, accuracy_data(pred_list[[nm]], nm))}