3

我正在使用 pROC 包,我想使用 for 循环计算多个 ROC 曲线图。我的变量是作为字符串包含在向量中的特定列名,我希望 pROC 顺序读取该向量并使用“预测器”字段中似乎接受文本/字符的字符串。但是,我无法正确解析变量,因为我收到了错误:

'predictor' 参数应该是列的名称,可以选择引用。

这是带有 aSAH 数据集的示例代码:

ROCvector<- c("s100b","ndka")
for (i in seq_along(ROCvector)){
  a<-ROCvector[i]
pROC_obj <- roc(data=aSAH, outcome, as.character(a))

#code for output/print#

}

我试图只调用“a”并使用函数 print() 或 get() 没有任何结果。当然,手动编写变量(带或不带引号)是可行的。关于我应该在预测变量字段中使用的变量类型,我是否遗漏了什么?

4

2 回答 2

2

通过data=aSAH作为第一个参数传递,您将触发参数的非标准评估 (NSE), dplyr-style。因此,您不能简单地在变量中传递列名。outcome请注意与您通过未引用并且看起来像变量(但不是)的不一致?幸运的是,在 dplyr 中带有 NSE 的函数带有一个具有标准评估的等效函数,其名称以_. pROC 包遵循这个约定。如果您使用列名进行编程,通常应该使用这些。

长话短说,您应该改用该roc_函数,它接受字符作为列名(不要忘记引用"outcome"):

pROC_obj <- roc_(data=aSAH, "outcome", as.character(a))

您的代码稍微更惯用的版本是:

for (predictor in ROCvector) {
    pROC_obj <- roc_(data=aSAH, "outcome", predictor)
}
于 2019-11-29T07:41:59.827 回答
1

roc可以接受公式,所以我们可以使用paste0as.formula创建一个。IE

library(pROC)
ROCvector<- c("s100b","ndka")
for (i in seq_along(ROCvector)){
    a<-ROCvector[i]
    pROC_obj <- roc(as.formula(paste0("outcome~",a)), data=aSAH)
    print(pROC_obj)
    #code for output/print#

}

要获得原始呼叫,即没有paste0可以用于以后进行下游计算的呼叫,请使用evalbquote

pROC_obj <- eval(bquote(roc(.(as.formula(paste0("outcome~",a))), data=aSAH)))
于 2019-11-28T19:05:23.177 回答