Как включить интерактивный ввод в скрипт для запуска из командной строки - PullRequest
16 голосов
/ 14 октября 2010

Я пытаюсь написать интерактивный R-скрипт. Например:

try.R:

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

Теперь, если я запускаю его в командной строке как

$ R --no-save < try.R

Он пытается получить stdin из try.R, выдав следующую ошибку:

> 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

Я пробовал несколько других методов, но все они дают ошибки. Например:

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

Так как мне написать сценарий R, который работает из командной строки оболочки * nix и может принимать интерактивный ввод от пользователя?

Ответы [ 3 ]

21 голосов
/ 14 октября 2010

Попробуйте это:

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

Надеюсь, вам подойдет какой-нибудь вариант.

4 голосов
/ 22 мая 2015

То, что у меня работало в Windows с RStudio 0.98.945 и R версии 3.1.1, было:

    cat("What's your name? ")
    x <- readLines(con=stdin(),1)
    print(x)
0 голосов
/ 30 мая 2018

Ответ @ Джошуа Ульриха хорош для Linux, но зависает под macOS и должен завершаться с помощью Ctrl-D.

Это обходной путь для Linux и macOS:

#!/usr/bin/env Rscript

print(system("read -p 'Prompt: ' input; echo $input", intern = TRUE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...