【发布时间】:2018-04-19 16:57:18
【问题描述】:
我是 R 的新手并且已经搜索过,但没有找到可以满足我尝试编写脚本的需求的查询/答案。我正在尝试循环 pROC 包中的 roc() 函数来计算多个 ROC 曲线的几个参数。我的数据看起来像这样,只有更多的行和列(我的 df 在下面的代码中称为 ROCTest5):
Outcome A B C D E BiOutcome
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
Good 21151. 4966. 1943. 646. 277. 1.
Good 46278. 9408. 2810. 906. 856. 1.
Poor 4717. 2153. 758. 215. 148. 0.
Poor 14488. 4661. 1167. 530. 299. 0.
如果我手动运行每个 ROC 分析,这不适用于更大的数据集,我将使用以下代码:
ROCvirus = roc(ROCTest5$Outcome,
ROCTest5$A,
plot=TRUE, grid=TRUE,
print.auc=TRUE, show.thres=TRUE)
aucA = auc(ROCvirus, as.vector=T)
ROCViCoorBest = coords(ROCvirus,"best",input=c("threshold", "specificity", "sensitivity", "accuracy",
"tn", "tp", "fn", "fp", "npv", "ppv"), as.list=T)
我一直试图用于创建循环的代码如下所示:
library(pROC)
rocData = NULL
for(i in ROCTest5[A:E]){
rocValue = roc(ROCTest5$Outcome,
ROCTest5[[i in A:E]], #issue is here!
plot=FALSE, auc=TRUE)
rocCoordi = coords(rocValue,"best",input=c("threshold", "specificity", "sensitivity", "accuracy",
"tn", "tp", "fn", "fp", "npv", "ppv"))
rocValue = rbind(rocValue,rocCoordi)
rocData = cbind(rocData,rocValue)
}
此代码不起作用,因为我没有正确输入第二个输入参数的语句,这是每次循环迭代都会更改的参数。我尝试了几种不同的方法来做到这一点,例如使用第二个“for”语句,但无法使脚本正常工作。我还尝试使用“应用”功能编写脚本,但遇到了同样的一般问题。 如何在需要两个输入语句的函数循环中输入变化语句? 如果您对代码有更正,或者为此采用完全不同的方法来实现我的目标,我会全力以赴。提前谢谢!
【问题讨论】:
-
你需要使用不同的
ins。在您的ROCTest5[[i in A:E]]行上,您应该将其更改为ROCTest5[[i %in% A:E]],这实际上是在下面调用match函数。 -
谢谢 C.Braun,这是有道理的。但是,我的代码中肯定有另一个错误,因为即使在添加 %in% 之后我也会收到错误:
Error in check_names_df(i, x) : object 'A' not found
标签: r loops for-loop apply roc