You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中对列表内各数据框迭代执行pROC包的ROC曲线分析?

修正你的pROC ROC曲线分析代码

你的代码存在几个关键问题,导致无法正确运行:

  • 循环中错误引用了list_data[[]](固定取列表第一个元素),而非当前循环的患者数据;
  • 用lapply(p, roc(...))是对数据框的每一列执行操作,完全偏离了用spike_conn预测Resected的需求;
  • 列表赋值Results_list[p]的方式错误,不能用数据框作为索引。

以下是两种可行的修正方案:

方案一:修正for循环

library(pROC)

Results_list <- list()
# 按列表索引循环,同时获取患者ID和对应数据
for (i in seq_along(list_data)) {
  current_patient_data <- list_data[[i]]
  # 确保分类变量是因子型(pROC要求二分类响应变量为因子/逻辑值)
  current_patient_data$Resected <- as.factor(current_patient_data$Resected)
  # 生成ROC对象:指定响应变量和预测变量
  roc_obj <- roc(response = current_patient_data$Resected, 
                 predictor = current_patient_data$spike_conn)
  # 以患者ID为名称存储AUC值
  Results_list[[names(list_data)[i]]] <- roc_obj$auc
}

方案二:用lapply简化代码(更推荐)

lapply可以直接遍历列表元素,避免索引错误:

library(pROC)

Results_list <- lapply(list_data, function(patient_df) {
  # 统一处理分类变量格式
  patient_df$Resected <- as.factor(patient_df$Resected)
  # 计算ROC并提取AUC
  roc(response = patient_df$Resected, predictor = patient_df$spike_conn)$auc
})

后续处理建议

  • 检查Resected是否为二分类变量:如果存在多分类情况,需要先过滤或重新编码;
  • 处理缺失值:如果spike_conn或Resected有缺失,可提前用na.omit(patient_df)清理,或在roc函数中设置na.rm = TRUE(默认已开启);
  • 将结果转为数据框方便查看:
auc_summary <- data.frame(Patient_ID = names(Results_list), 
                          AUC_Value = unlist(Results_list))

内容的提问来源于stack exchange,提问作者Yagharek_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:37:06