模拟多个图形的循环中的R错误
R error in a loop simulating multiple graphs
我正在尝试构建一个循环来绘制 10 个 ROC 并使用 R 库 ROCR
存储 10 个模型的 AUC 分数。我创建的循环产生错误:
Error in prediction(as.numeric(var_name[i]), s_test$clickthrough) :
Number of predictions in each run must be equal to the number of labels for
each run.
当我尝试 运行 单独预测时,标签数量不等于预测并没有错。谁能帮我解决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 包创建的预测 class。我认为这可能是问题所在,但有谁知道如何从 ROCR 包中提取数据以适合图表?
已修订
lr.pred 将是一个 "prediction" 对象,lr.ROC 将是一个具有特定 class.
的 "performance" 对象
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]
.
我正在尝试构建一个循环来绘制 10 个 ROC 并使用 R 库 ROCR
存储 10 个模型的 AUC 分数。我创建的循环产生错误:
Error in prediction(as.numeric(var_name[i]), s_test$clickthrough) : Number of predictions in each run must be equal to the number of labels for each run.
当我尝试 运行 单独预测时,标签数量不等于预测并没有错。谁能帮我解决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 包创建的预测 class。我认为这可能是问题所在,但有谁知道如何从 ROCR 包中提取数据以适合图表?
已修订 lr.pred 将是一个 "prediction" 对象,lr.ROC 将是一个具有特定 class.
的 "performance" 对象 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]
.