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

在循环/函数中使用pROC::roc()避免错误的方法

解决循环/函数中向pROC::roc()传递参数的问题

针对变量名含空格的场景,以下几种方法可以解决你遇到的variable lengths differ报错:

示例数据(模拟带空格的变量名)

library(pROC)

# 构造测试数据
df <- data.frame(
  response = factor(sample(c(0,1), 100, replace = TRUE)),
  `Variable One` = rnorm(100),
  `Variable Two` = rnorm(100),
  `Variable Three` = rnorm(100)
)
# 提取需要分析的变量名(排除response)
var_names <- setdiff(names(df), "response")

方法1:直接提取数据列(最稳妥)

跳过变量名解析,直接传递数据框的列向量,完全规避空格变量名的语法问题:

roc_list <- lapply(var_names, function(var) {
  roc(response = df$response, predictor = df[[var]], quiet = TRUE)
})
# 给列表命名便于后续索引
names(roc_list) <- var_names

方法2:公式语法结合符号注入

用rlang工具将字符串变量名转为符号,注入公式中:

library(rlang)

roc_list <- lapply(var_names, function(var) {
  # 构建公式:response ~ 带空格的变量
  roc_formula <- response ~ !!sym(var)
  roc(roc_formula, data = df, quiet = TRUE)
})
names(roc_list) <- var_names

如果不想依赖rlang,也可以用字符串拼接生成公式:

roc_list <- lapply(var_names, function(var) {
  roc_formula <- as.formula(paste("response ~", paste0("`", var, "`")))
  roc(roc_formula, data = df, quiet = TRUE)
})

方法3:使用pROC::roc_()(标准评估版本)

roc_()是roc()的标准评估接口,直接接受字符串形式的变量名:

roc_list <- lapply(var_names, function(var) {
  roc_(response = "response", predictor = var, data = df, quiet = TRUE)
})
names(roc_list) <- var_names

报错原因说明

你之前遇到的variable lengths differ,是因为直接将字符串变量名(如i)传给roc()的predictor参数时,函数会把字符串本身当成长度为1的向量,和长度为100的response向量不匹配。必须将变量名转换为数据框对应的列向量,或是通过公式/标准评估接口让函数正确识别变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:37:00