If I run R script under command line (actually I run that from calling in VBA), how can I output any error/warning messages to a txt file?
Asked
Active
Viewed 2.3k times
22
-
How about yourprogram.exe > anoutputfile.txt ? Although that captures everything. On *nix you could direct stderr, not sure about Win*. See http://stackoverflow.com/questions/1109017/how-do-you-print-to-stderr-in-r – Pete855217 Jul 26 '12 at 09:20
-
1You can possibly use `sink()` – Andrie Jul 26 '12 at 09:21
-
Thank you. I tried to search in web on how to use sink in R but a bit confused on how to output error/warning message in my case. Would you mind give me a quick example on how to do that? Thank you again. – Joyce Jul 26 '12 at 09:33
-
I roughly know how sink() works, but I can only output variables to the output txt file, how to output error message? – Joyce Jul 26 '12 at 09:59
2 Answers
42
You can use sink()
to divert messages as well as warnings to a file. The trick is to set the argument type="message"
:
Here is an example adapted from the help for ?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"
-
5However, how can I close the connection with the log file? I tried sink(), but when I want to delete the log file, I cannot delete that, as seems there is still connection. Only after I closed my R, I can delete that. How should I close the connection? – Joyce Jul 27 '12 at 02:23
-
2This is because in the original answer, sink was not terminated with `type="message"` and the connection was not closed. (Fixed in the updated answer) – Jthorpe Apr 28 '17 at 18:31
21
To close the connection with the log file you have to use sink(type="message")
instead of sink()
and then close(zz)
.

Jean-François Fabre
- 137,073
- 23
- 153
- 219

André le Blond
- 368
- 3
- 8