计算函数并将一列与表中的多列进行比较

问题描述

我在一个简单的任务上遇到了一个大问题。我有一个由真实值(0 和 1)和来自不同模型的几个预测值组成的数据集。我正在使用包“指标”,我想使用 AUC(指标中的函数“auc”)评估每个预测。 这是一个可重现的示例。我有一张桌子:

evaluate <- "true prediction_1 prediction_2 prediction_3
1 0.9 0.5 0.8
1 0.9 0.4 0.7
1 0.8 0.6 0.75
0 0.1 0.3 0.2
0 0.05 0.4 0.1
0 0.15 0.45 0.15"
Table <- read.table(text=evaluate,header = TRUE)

让我们得到第一个预测的 AUC:

require(Metrics)
auc(Table[,1],Table[,2])
[1] 1

同样,我们可以得到第二个预测的 AUC:

auc(Table[,3])
[1] 0.8333333

但是如何同时获得所有列的 AUC? (不是对它们求和而是在每对上迭代函数) 我想输入如下内容

auc(Table[,2:4])

并获得一个表格,其中每个预测都分配有其 AUC 值,但这不起作用...

[1] 13.16667
Warning message:
In auc(Table[,2:4]) :
  longer object length is not a multiple of shorter object length

我想这很简单,但我正在努力寻找答案,所以如果有人能帮助我或为我指明正确的道路,我将不胜感激!

解决方法

使用 mapply

mapply(auc,list(Table[,1]),Table[-1])
# [1] 1.0000000 0.8333333 1.0000000

mapply 在其参数中给出的列表上对 auc 元素进行评估。因为 Table[,1] 被强制转换为一个向量,所以我们需要再次 list 它。我们也可以使用 Table[,1,drop=FALSE],但使用 list 输出更好。

,

我们也可以使用 sapply

sapply(Table[-1],function(x) auc(Table[,1],x))
#  prediction_1 prediction_2 prediction_3 
#  1.0000000    0.8333333    1.0000000