2016-08-18 4 views
0

파일로 가득 찬 디렉토리를 읽고 각 데이터 파일에서 완전히 관찰 된 사례의 수를보고하는 R 함수를 작성하는 방법을 배우고 있습니다.For 루프 만 마지막 레코드 표시

내 기능은 하나의 사례에서 작동하지만 여러 사례가있는 경우 루프는 마지막 레코드 만 표시합니다.

complete <- function(directory, id = 1:332) { 
    files_list <- list.files(path = directory, full.names = TRUE) 
    dat <- data.frame() 
    for (i in id) { 
      dat <- rbind(dat, read.csv(files_list[i])) 
      } 
    nobs <- sum(complete.cases(dat)) 
    id <- i 
    data.frame(id, nobs) 
} 

내 예상 결과

ID가 1 = 때 대신

> complete("specdata", 1:6) 

    ## id nobs 
    ## 1 1 932 
    ## 2 2 711 
    ## 3 3 475 
    ## 4 4 338 
    ## 5 5 586 
    ## 6 6 463 

을 실행 : 6 10 개 결과와 data.frame을 반환 그것, 그것은 반환

> complete("Specdata", 1:6) 


    id nobs 
1 6 3562 

나는 의심 문제는 루프가 끝날 때마다 함수가 값을 대체한다는 것입니다. 저는 SO와 다른 곳에서 "마지막 기록만을 보여줌"문제에 대한 도움을 구했고 그 답을 통해 해결책을 찾을 수 없습니다.

도움을 주셔서 감사합니다. 나는 R이 완전히 새롭다는 것을 확신합니다.

+0

@ ZheyuanLi 일 때마다 rbind을 반복해야합니다. 예, 전화를 걸었습니다. 죄송합니다. –

+1

** 예상 출력 ** (ala [reproducible examples] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example))을 제공해주십시오. 귀하의 코드 (@ ZheyuanLi 명시)는 명시 적으로 단일 행 데이터 프레임을 반환한다는 점에서 완벽하게 분명합니다. 'dat'을 반환하고 싶다면 마지막 줄 (또는 return (...) 내)에 있어야합니다. – r2evans

+0

@ r2evans - 원래 출력물을 예상 출력으로 편집했습니다. 불분명하고 도움을 주셔서 감사합니다. – john1607

답변

0

희망!

complete <- function(directory, id = 1:332) { 
     files_list <- list.files(path = directory, full.names = TRUE) 
     dat <- data.frame() 
     tmp <- data.frame() 
       for (i in id) { 
         dat <- rbind(dat, read.csv(files_list[i])) 
         nobs <- sum(complete.cases(dat)) 
         id <- i 
         tmp <- rbind(tmp,data.frame(id,nobs)) 
       } 


     tmp 
} 

세부 사항 :

당신은 따라서 i의 가장 최근의 값이 설정되어 for 루프 후 데이터 프레임을 반환하고 모두의 sum이 있기 때문에 그것은 주로의

. forreturn 최종 데이터 프레임이

+0

그 덕분에, 대단히 감사합니다. 이제 두 개의 data.frames dat 및 tmp를 사용하여 자체 루프 쓰기를 해결하는 방법을 살펴 보겠습니다. – john1607

+0

@ john1607 일반적인 초보자 문제입니다. 걱정 마. 코딩을 계속하십시오! – amrrs

0

예, 명확하지 않은 코드가 많이 있습니다. 특히 rbind은 설명을 제공하지 않으며 함수의 매개 변수로 id를 사용하지 않습니다. 당신이 묘사하는 것을하는 R 관용적 방법은 sapply가 파일 목록을 반복하는 무언가 일 것이며, 익명의 함수는 그것을 읽고 완전한 사례의 수를 반환합니다.

files_list <- list.files(path = directory, full.names = TRUE) 
sapply(files_list, function(fi) sum(complete.cases(read.csv(fi)))) 
관련 문제