【问题标题】:Converting object name to a string in a list in R将对象名称转换为R中列表中的字符串
【发布时间】:2021-03-05 18:50:25
【问题描述】:

我似乎找不到有效的答案,但基本上我正在循环我创建的模型,我的目标是输出准确性以及模型的名称,如下所示:

  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%"

在每种情况下,我都找不到将“模型名称”替换为模型名称的方法。有没有一种简单的方法可以做到这一点?使用 pred_list 名称还是其他方式?

任何建议将不胜感激。在询问之前我确实在谷歌和这里搜索过,但没有成功!

还有一个额外的问题 - 有没有办法将这些结果输出到某种表格或数组中,而不是按原样输出? (对不起,如果这应该是一个单独的问题)

【问题讨论】:

    标签: r machine-learning


    【解决方案1】:

    我们可以使用list(log__pred = log_pred, ...) 或更轻松地使用dplyr::lstpurrr::lst 创建named 列表

    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)
     }
    

    关于输出,它只是printing,即没有返回值。如果我们需要创建一个对象,那么我们可以在函数内部更改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))
    }
    

    【讨论】:

    • 太棒了,这完美地回答了我的问题。我确实有另一个问题(尽管我可以提出一个新问题)。如果我想实际使用模型的名称,例如“逻辑回归”而不是模型对象名称中的“log_pred”,是否有任何简单的选项?像某种字典?
    • @Jonas_Konig 您能否将其作为新问题发布。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2017-09-08
    • 1970-01-01
    • 2010-12-21
    • 2015-02-25
    相关资源
    最近更新 更多