tags:

views:

64

answers:

2

I am trying to write an interactive R script. For example:

try.R:

print("Entr some numbers. >",quote=F)
a = scan(what=double(0))
print a
q()

Now, if I run it on the command line as

$ R --no-save < try.R

It tries to get the stdin from try.R, giving the following error:

> print("Entr some numbers. >",quote=F)
[1] Entr some numbers. >
> a = scan(what=double(0))
1: print a
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  scan() expected 'a real', got 'print'
Execution halted

I tried a few other methods but they all give errors. For example:

$ R CMD BATCH try.R 
$ Rscript try.R 

So how do I write an R script that works from the *nix shell command line, and can take in interactive input from the user?

A: 

Try ?readline

a <- readline("What? :")
Brandon Bertelsen
`?readline` says it only works in *interactive* sessions...
Joshua Ulrich
It doesn't give the error, but still doesn't read anything from the user.
highBandWidth
sad face.......
Brandon Bertelsen
+1  A: 

Try this:

cat("What's your name? ")
x <- readLines(file("stdin"),1)
print(x)

Hopefully some variant of that works for you.

Joshua Ulrich
yes, that does!
highBandWidth
IIRC just `readLines(n=1)` should do too.
Dirk Eddelbuettel
@Dirk Eddelbuettel: that doesnt seem to work.
highBandWidth
My bad, sorry. I happened to have used `readLines()` without a file argument, defaulting to stdin, at the same time -- see r-help as of this morning.
Dirk Eddelbuettel
@Dirk, apparently `file("stdin")` and `stdin()` can refer to different things in different situations. See `?file` and `?stdin`.
Joshua Ulrich