2012-07-04 2 views
0

roc() 함수를 pROC 패키지의 데이터 프레임 df, df$site의 하위 집합 인 "01", "02", "03"의 하위 집합에있는 특정 변수에 적용하려고합니다. 함수 roc()은 목록을 반환하므로 내 객체 roc_site이 각 사이트에 대한 결과 목록을 포함하는 목록이 될 것으로 기대하고 있습니다.dlply를 pROC와 함께 사용

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