2010-10-14 71 views
15

Tôi đang cố gắng viết một tập lệnh R tương tác. Ví dụ:Cách đưa đầu vào tương tác vào tập lệnh được chạy từ dòng lệnh

try.R:

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

Bây giờ, nếu tôi chạy nó trên dòng lệnh như

$ R --no-save < try.R 

Nó cố gắng để có được những stdin từ try.R, đưa ra sau lỗi:

> 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 

Tôi đã thử một vài phương pháp khác nhưng tất cả đều đưa ra lỗi. Ví dụ:

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

Vậy làm cách nào để viết tập lệnh R hoạt động từ dòng lệnh * nix shell và có thể lấy đầu vào tương tác từ người dùng?

Trả lời

19

Hãy thử điều này:

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

Hy vọng rằng một số biến thể của hoạt động cho bạn.

+2

IIRC chỉ 'readlines (n = 1) 'nên làm quá. –

+0

@Dirk Eddelbuettel: có vẻ như không hoạt động. – highBandWidth

+1

Rất tiếc, tôi rất tiếc. Tôi tình cờ đã sử dụng 'readLines()' mà không có đối số tập tin, mặc định là stdin, cùng một lúc - xem r-help vào sáng nay. –

5

gì làm việc cho tôi trên Windows với RStudio 0.98.945 và phiên bản R 3.1.1 là:

cat("What's your name? ") 
    x <- readLines(con=stdin(),1) 
    print(x) 
Các vấn đề liên quan