readline() and Rterm in Windows
Mikkel Grum wrote:
Duncan and Prof, thanks for your comments and
apologies for not being more specific. I'm not getting
the same results you get from the steps you propose.
If I write a script foo.R with two lines
id <- readline("Please enter an ID: ")
id
and then use source("foo.R") (either at the Rterm
prompt, or in RGui) it is true that get prompted, but
the second line does not visibly run, i.e. I get
source("id.r")
Please enter an ID: 5 and if I then type id, I get
id
[1] "id" If I cut and paste the two lines in RGui (in one go), I get
id <- readline("Please enter an ID: ")
Please enter an ID: id
What I really want is a batch file on the desktop with
the following commands:
c:\r\R-2.2.0\bin\Rterm.exe --no-save --no-restore
<script.R> script.out 2>&1
c:\texmf\miktex\bin\latex
\nonstopmode\input{blue.tex}
and script.R reads something like:
id <- readline("Please enter an ID: ")
id
Sweave("blue.Rnw")
I said that script.R didn't run, which was an
incorrect description. It runs without prompting for
the ID, and gives error messages all through because
blue.Rnw needs the id.
This is a very simplified version of what I'm doing,
but if I use only the first line of the batch file and
the first two lines of the script and could get that
to work, I could figure out the rest.
It won't work so simply. You're redirecting stdin, so user input would
be taken from there; you're redirecting stdout and stderr, so the prompt
won't be visible to the user.
You need to open new handles to the console. The code below will do it
in Windows; the syntax to specify the console in Unix-alikes will be
different (but I don't know what it is).
conout <- file('CONOUT$','w')
conin <- file('CONIN$', 'r')
cat('Please enter an ID:', file=conout)
flush(conout)
id <- readLines(conin, 1)
print(id)
Duncan Murdoch