我正在尝试将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
是一个列表,其中包含每个站点的一个列表,但每个站点的结果相同;它没有拆分数据帧。我错过了什么?
答案 0 :(得分:2)
传递给.fun
中dlply
的函数需要接受数据帧的整个块作为其(第一个)参数。
所以在这种情况下,你真正想要的是编写自己的小函数,它将获取你的数据框并计算你想要的东西。 e.g。
foo <- function(x){
roc(x$Risk, x$Rating, na.rm = TRUE, plot = TRUE)
}
然后将该函数传递给.fun
。
您获得相同结果的原因是,对于每个块,dlply
在您的块上调用roc
,但是传递df$Risk
和df$Rating
每次,这些是整个数据集的载体。