2012-07-04 60 views
0

我試圖將pROC包中的roc()函數應用於數據框df中的特定變量,df$site上的子集由類似「01」,「02」,「03」的字符組成。函數roc()返回一個列表,所以我期待我的對象roc_site是一個列表,它依次包含每個站點的結果列表。與pROC一起使用dlply

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

有時,當你無法弄清楚發生了什麼時,它有助於用一個簡單的print()來代替這種分裂應用循環內的「函數」。然後你會看到什麼正在通過。 –

+0

這是一個好主意;謝謝你的提示! – ahj

+0

或'瀏覽器()',這樣你就可以檢查你得到的東西 – Calimo

回答

2

您傳遞給.fun的函數dlply需要接受數據幀的整個塊作爲其(第一個)參數。

所以在這種情況下,你真正想要的是編寫你自己的小函數,它將採取你的數據框架和計算你想要的。例如

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

然後將該函數傳遞給.fun

你得到了相同的結果的原因是,對於每個大塊,dlply呼籲您大塊roc,但每次路過和df$Riskdf$Rating,這些都爲整個數據向量組

+0

這是驚人的快速和驚人的信息。非常非常感謝你。 – ahj