2010-09-06 19 views
6

Znalazłem to post sprzed roku i używam R version 2.11.1 (2010-05-31), ale wciąż otrzymuję komunikaty o błędach bez numerów linii.Numery linii skryptu R w przypadku błędu?

Jakieś rozwiązanie?

+0

Otrzymuję komunikaty o błędach z numerami linii. Jak ładujesz swoje skrypty? – Shane

+0

@Shane Używam Rscript. Jak ładujesz swoje skrypty? –

+0

Używam source() z GUI systemu Windows. – Shane

Odpowiedz

6

Podane tam odpowiedzi są nadal aktualne. Zwracanie numerów linii ze skryptu nie jest proste, ale R może dostarczyć znacznie więcej informacji o tym, gdzie można znaleźć błąd.

Można użyć opcji błędach, aby zapisać informacje w pliku, na przykład:

options(error = quote({ 
    sink(file="error.txt"); 
    dump.frames(); 
    print(attr(last.dump,"error.message")); 
    traceback(); 
    sink(); 
    q()})) 

The findLineNum function() może być używany, jeśli masz nazwę pliku gdzieś dostępne. Jeśli komunikat o błędzie, można zrobić coś takiego:

dump.frames() 
x <- attr(last.dump,"error.message") 
ll <- gsub("Error in (.*) : .*","\\1",x) 
lln <- findLineNum(srcfile,ll) 
+6

+1 Dzięki, to rozczarowujące, że nie jest jeszcze domyślnie zaimplementowana w R. Wydaje mi się, że jest to bardzo pożądana funkcja. –

+0

To nie pomoże, jeśli błąd jest na najwyższym poziomie skryptu R. –

0

W nadchodzącym R 2.14, zespół rdzeń czyni postępy w kierunku realizacji tej funkcji. Funkcje skryptów załadowane z source(file=..., keep.file=TRUE) będą zawierały atrybut srcref, który identyfikuje zakres znaków odpowiadający definicji funkcji w pamięci wewnętrznej pliku źródłowego zapisanego jako obiekt klasy srcfilecopy.

To nie powoduje natychmiastowego debugowania na poziomie linii, ale pozwala uzyskać przybliżone numery linii, jeśli chcesz zabrudzić sobie ręce. Jest to także postęp.

Powiązane problemy