2010-10-14 5 views
15

J'essaye d'écrire un script R interactif. Par exemple:Comment inclure une entrée interactive dans un script à exécuter à partir de la ligne de commande

try.R:

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

Maintenant, si je l'exécute sur la ligne de commande comme

$ R --no-save < try.R 

Il cherche à obtenir le stdin de try.R, donnant les éléments suivants erreur:

> 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 

J'ai essayé quelques autres méthodes mais elles donnent toutes des erreurs. Par exemple:

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

Alors, comment puis-je écrire un script R qui fonctionne à partir de la * ligne de commande shell nix, et peut prendre en entrée interactive de l'utilisateur?

Répondre

19

Essayez ceci:

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

Espérons une variante de cela fonctionne pour vous.

+2

IIRC juste 'readlines (n = 1)' doit faire aussi. –

+0

@Dirk Eddelbuettel: cela ne semble pas fonctionner. – highBandWidth

+1

Mon mauvais, désolé. Il se trouve que j'ai utilisé 'readLines()' sans argument de fichier, par défaut à stdin, en même temps - voir r-help dès ce matin. –

5

Ce qui a fonctionné pour moi sur Windows avec rstudio 0.98.945 et version R 3.1.1 est:

cat("What's your name? ") 
    x <- readLines(con=stdin(),1) 
    print(x) 
Questions connexes