循环中的R错误模拟多个图形



我正在尝试构建一个循环以绘制10个ROC并使用R库ROCR为10个模型存储AUC分数。我创建的循环会生成一个错误:

预测错误(as.numeric(var_name [i](,s_test $ clickthrough(: 每次运行中的预测数必须等于标签的数量 每个运行。

当我尝试单独运行预测时,标签数量不等于预测并没有错。谁能帮助我解决由for循环造成的错误?

个体预测(这效果很好(:

lr.pred<- prediction(as.numeric(lda_predp),
                  s_test$clickthrough)
AUC1 <- performance(lr.pred,"auc")@y.values[[1]]
lr.ROC1 <- performance(lr.pred,"tpr","fpr")
plot(lr.ROC1, main= "LDA")

问题发生在循环中:

par(mfrow=c(2,5))
var_name = c("nb_predp","lda_predp","qda_predp","lg_prob","lda_forwardp","lda_lassop",
         "lda_pred_int_p","lda_pred_t_p","lda_pred_v_p","lda_pred_c_p")

    for (i in 1:length(var_name)){
      lr.pred[i] <- prediction(as.numeric(var_name[i]),
                  s_test$clickthrough)
      AUC[i] <- performance(lr.pred[i],"auc")@y.values[[1]]
      lr.ROC[i] <- performance(lr.pred[i],"tpr","fpr")
      plot(lr.ROC[i], main= var_name[i])
    }

我检查了lr.pred的格式,事实证明它不是向量,而是由ROCR软件包创建的预测类。我认为这可能是问题所在,但是有人知道如何从ROCR软件包中提取数据以适合图表吗?

修订lr.pred将是一个"预测"对象,lr.roc将是具有特定类的"性能"对象。

 lr.pred = list()
 var_name = 
 c("nb_predp","lda_predp","qda_predp","lg_prob","lda_forwardp","lda_lassop", 
  "lda_pred_int_p","lda_pred_t_p","lda_pred_v_p","lda_pred_c_p")
 for (i in 1:length(var_name)){
 lr.pred[[i]] <- prediction(var_name[i], s_test$clickthrough)
 AUC[i] <- performance(lr.pred[i],"auc")@y.values[[1]]
 lr.ROC[i] <- performance(lr.pred[i],"tpr","fpr") 
 plot(lr.ROC[i], main= var_name[i])
}

您正在传递prediction()调用中的字符串,而未命名对象。

  • 在您的工作单个非环运行中,您可以致电: prediction(as.numeric(lda_predp)...)

  • 在您的循环中,它类似于传递引号的字符串: prediction(as.numeric("lda_predp")...)

要解决,要么分配 var_name 到命名对象(即无字符串(,然后运行for循环,如:

var_name = c(nb_pred1, lda_pred1, qda_pred1, lg_prob, lda_pred_1_p, lda_pred_2_p,
             lda_pred_int_p, lda_pred_t_p, lda_pred_v_p, lda_pred_c_p)

或使用get()内部循环通过字符串引用环境对象:

var_name = c("nb_pred1", "lda_pred1", "qda_pred1", "lg_prob", "lda_pred_1_p", "lda_pred_2_p",
             "lda_pred_int_p", "lda_pred_t_p", "lda_pred_v_p", "lda_pred_c_p")
lr.pred <- vector(); AUC <- vector(); lr.ROC <- vector()
for (i in 1:length(var_name)){
     lr.pred[i] <- prediction(as.numeric(get(varname[i]), s_test$clickthrough)
     ...
}

但可能,您想将后者运行,因为您将 main 分配给字符串: main=var_name[i]

最新更新