2012-07-26 11 views
11

Jeśli uruchomić skrypt R w ramach linii poleceń (faktycznie biegnę że z wywołaniem w VBA), jak mogę wyjście jakikolwiek błąd/komunikaty ostrzegawcze do txt plik?Wyjście błąd/ostrzeżenie log (plik txt) po uruchomieniu skryptu R w ramach linii poleceń

+0

Co powiecie na plik yourprogram.exe> ​​anoutputfile.txt? Chociaż to przechwytuje wszystko. On * nix możesz skierować stderr, nie wiesz o Win *. Zobacz http://stackoverflow.com/questions/1109017/how-do-you-print-to-stderr-in-r – Pete855217

+1

Można ewentualnie użyć 'sink()' – Andrie

+0

Dziękuję. Próbowałem wyszukiwać w Internecie, jak korzystać z zlewu w R, ale nieco mylić, jak wydrukować komunikat o błędzie/ostrzeżenie w moim przypadku. Czy mógłbyś dać mi szybki przykład, jak to zrobić? Jeszcze raz dziękuję. – Joyce

Odpowiedz

26

Można użyć sink() przekazywać wiadomości, jak również ostrzeżenia do pliku. Sztuką jest, aby ustawić argument type="message":

Oto przykład dostosowane z pomocą dla ?sink:

setwd(tempdir()) 

## capture messages and errors to a file. 
zz <- file("all.Rout", open="wt") 
sink(zz, type="message") 

try(log("a")) 

## reset message sink and close the file connection 
sink(type="message") 
close(zz) 

## Display the log file 
readLines("all.Rout") 
[1] "Error in log(\"a\") : Non-numeric argument to mathematical function" 
+0

Świetne rzeczy, dziękuję! – Joyce

+3

Jak jednak zamknąć połączenie z plikiem dziennika? Próbowałem sink(), ale gdy chcę usunąć plik dziennika, nie mogę go usunąć, ponieważ wydaje się, że nadal jest połączenie. Dopiero po zamknięciu mojego R mogę to usunąć. Jak mam zamknąć połączenie? – Joyce

+1

Jest tak dlatego, że w oryginalnej odpowiedzi zlew nie został zakończony za pomocą 'type =" message "', a połączenie nie zostało zamknięte. (Naprawiono w zaktualizowanej odpowiedzi) – Jthorpe

17

Aby zamknąć połączenie z pliku dziennika trzeba użyć sink(type="message") zamiast sink() a następnie close(zz) .

(Nie mam wystarczającej reputacji, aby użyć funkcji dodawania komentarza)

Powiązane problemy