Reputation: 17321
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?
Upvotes: 17
Views: 30824
Reputation: 465
The answer by @Joshua Ulrich is fine for Linux, but hangs under macOS and needs to be terminated using Ctrl-D.
This is a work-around for both Linux and macOS:
#!/usr/bin/env Rscript
print(system("read -p 'Prompt: ' input; echo $input", intern = TRUE))
Upvotes: 0
Reputation: 193
What worked for me on Windows with RStudio 0.98.945 and R version 3.1.1 was:
cat("What's your name? ")
x <- readLines(con=stdin(),1)
print(x)
Upvotes: 4
Reputation: 176648
Try this:
cat("What's your name? ")
x <- readLines(file("stdin"),1)
print(x)
Hopefully some variant of that works for you.
Upvotes: 22