Keith Jewell wrote:
In MS Windows I
  a) invoke Rterm from a batch file (test.bat)
  b) to execute commands from a script (m:\test.rsc)
  c) capturing output in a log file (m:\test.log)
BUT if the script results in an error the error message is NOT written to the log file, leaving me problems when the error is from a complicated function.

Simplified example:.

test.bat ------------------------
REM ensure 'R' is in path
path \\Server02\stats\R\R-Current\bin\;%PATH%
Rterm --no-init-file --no-restore-data --no-save --silent < m:\test.rsc > m:\test.log
---------------------

m:\test.rsc -----------------
print("this is a test")
#generate an error
nls()
------------------

The error message:
  "Error in .Internal(inherits(x, what, which)) : 'x' is missing"
is is NOT written to the log file, which just ends

m:\test.log --------------------------
  <snip>
print("this is a test")
[1] "this is a test"
#generate an error
nls()
---------------------

I surmise this is due to output buffering (?). In an S-Plus version I turned off buffering with
  guiSetOption(option.name="BufferOutputWindows", value.string="F")
but I don't think this is available in R (?).

Has anyone any suggestions?

It's not output buffering, it's because error messages go to a different file handle than regular ones. You need to redirect both stdout and stderr.

I'm not sure of the syntax to do that in Windows CMD, but R CMD BATCH test.rsc instead of Rterm would do it. (The output should go to test.Rout.)

Duncan Murdoch

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to