使用dlply和pROC

时间:2012-07-04 01:53:29

标签: r plyr roc

我正在尝试将pROC包中的roc()函数应用于数据框df中的特定变量,df$site上的子集,其中包含看起来像“01”的字符,“ 02“,”03“。函数roc()返回一个列表,因此我希望我的对象roc_site成为一个列表,而该列表又包含每个站点的结果列表。

roc_site <- dlply(
  .data = df, 
  .variables = "site", 
  .fun = roc, 
  .progress = "text",
  response = df$Risk,
  predictor = df$Rating, 
  na.rm = TRUE, plot = TRUE)

此操作成功运行,roc_site是一个列表,其中包含每个站点的一个列表,但每个站点的结果相同;它没有拆分数据帧。我错过了什么?

1 个答案:

答案 0 :(得分:2)

传递给.fundlply的函数需要接受数据帧的整个块作为其(第一个)参数。

所以在这种情况下,你真正想要的是编写自己的小函数,它将获取你的数据框并计算你想要的东西。 e.g。

foo <- function(x){
    roc(x$Risk, x$Rating, na.rm = TRUE, plot = TRUE)
}

然后将该函数传递给.fun

您获得相同结果的原因是,对于每个块,dlply在您的块上调用roc,但是传递df$Riskdf$Rating 每次,这些是整个数据集的载体