2013-01-08 20 views
3

구문 오류를 계산하고 프로그램 실행 후 구문 오류 수를보고하는 코드를 사용합니다. 오류 계산 코드는 이전 질문에 대한 응답으로 stackoverflow에 제공되었습니다. R: is there a command for the end of a file that states whether any errors occurred?프로그램 실행 후 오류 찾기

대용량 데이터 세트를 분석 할 때 인쇄 메시지를 주석으로 처리하는 것을 잊어 버리고 R이 모든 데이터와 모든 코드를 인쇄 할 수없는 경우가 있습니다.

[ reached getOption("max.print") -- omitted 498 rows ] 

그럴 때 오류 계산 코드가 오류를보고하면 단순히 오류를 확인하기 위해 다시 스크롤 할 수 없습니다. R 코드가 실행 된 후 오류를 찾는 방법이 있습니까? traceback()을 사용해 보았지만 도움이되지 않았습니다. 나는 traceback()을 사용한 적이 없으며 올바르게 사용하지 않았을 수도 있습니다. 온라인에서 찾은 다른 잠재적 인 솔루션은 R 파일을 실행하기 전에 코드를 삽입해야하는 것 같습니다.

인쇄 명령을 주석 처리하여 R 코드를 다시 실행할 수는 있지만이 경우 코드를 실행하는 데 몇 시간이 걸릴 수 있습니다. 어쩌면 오류를 찾기 위해 작은 데이터 세트를 사용하여 코드를 재실행 할 수는 있지만 데이터 세트의 크기가 오류를 발생시키지 않는다고 가정합니다.

다음은 오류가있는 예제 프로그램입니다. n이 많은 수 (어쩌면 10000000)로 변경되면이 코드는 위에서 설명한 것과 같은 시나리오 또는 시나리오를 만드는 것처럼 보입니다. 조언 해 주셔서 감사합니다.

일반적으로 파일을 * .r 파일에 저장 한 다음 해당 파일의 내용을 복사하여 내 Dell PC 64 비트 Windows 7 Professional 데스크톱에 설치 한 기본 R GUI에 붙여 넣어 코드를 실행합니다. R 응용 프로그램.

# the four lines below are for counting syntax errors 

.error.count <- 0 
old.error.fun <- getOption("error") 
new.error.fun <- quote(.error.count <- .error.count + 1) 
options(error = new.error.fun, width=2400) 

########################################################## 

n <- 10 

a <- rnorm(n,10,4) 
b <- rnorm(n,50,8) 
c <- EXP(b) 
d <- a + b 

df <- data.frame(a,b,d) 
df 

########################################################## 

# the three lines below count the number of errors in the code above 

cat("ERROR COUNT:", .error.count, "\n") 
options(error = old.error.fun) 
rm(.error.count, old.error.fun, new.error.fun) 

########################################################## 

traceback() 

# No traceback available 

답변

1

대화 형 모드 인 AFAICT에서만 작동하는 옵션 하나입니다.

오류 로그 변수에 오류 메시지를 작성하여 프리앰블을 수정

cat("ERROR COUNT:", .error.count, "\n") 
cat("ERROR LOG:", .error.log, collapse="\n") 

결과 :

.error.log <- NULL 
old.error.fun <- getOption("error") 

new.error.fun <- quote({ 
    .error.count <- .error.count + 1 
    .error.log <- c(.error.log, geterrmessage()) 
}) 

그런 다음 코드와 cat() 오류 로그의 값을 실행

> cat("ERROR COUNT:", .error.count, "\n") 
ERROR COUNT: 1 
> cat("ERROR LOG:", .error.log, collapse="\n") 
ERROR LOG: Error: could not find function "EXP" 
1

다음은 01을 사용하는 약간 다른 접근 방식입니다.은 로그가 포함 된 오류 로거를 만드는 기능입니다.

error.logger <- local({ 
    error.log <- list() # initial empty log 
    function() { 
     # each time called, add to the log 
     error.log <<- c(error.log, geterrmessage()) 
    } 
}) 

options(error=error.logger, show.error.locations=TRUE) 

이것은 기본적으로 Andrie의 접근 방식과 동일하지만, 전역 변수 .error.log를 피할 수 있습니다. get('error.log', environment(error.logger))으로 로그에 액세스 할 수 있습니다. show.error.locations=TRUE은 오류 메시지에 소스 행 번호를 포함합니다.

대화 형 또는 일괄 처리 모드에 상관없이 작동합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 어느 쪽의 지위에 체크 표시를 줄 수 있었지만 그의 대답이 나를 위해 조금 더 명백했기 때문에 Andrie에게 그것을 줬다. 로그에 소스 행 번호를 포함하는 기능을 좋아하지만이를 수행하는 방법을 파악할 수 없었습니다. –

+0

'options (show.error.locations = TRUE)'가 R 2.15까지 추가되지 않았다고 생각합니다. 사용중인 R 버전이 최신 버전인지 확인하십시오. 그렇지 않으면이 옵션을 설정하면 R은 오류 메시지에 줄 번호를 포함시킵니다. –

관련 문제