2013-08-19 5 views
315

У меня есть файл, называемый a.r, он имеет chmod 755,Run R скрипт из командной строки

sayHello <- function(){ 
    print('hello') 
} 

sayHello() 

Как я могу запустить это с помощью командной строки?

+1

Я не очень разбираюсь в этом, но я не думаю, что вы можете запускать R-скрипты как есть. Разве вам не нужно было бы вызывать саму программу R и сказать ей запустить ваш файл 'a.r'? Вы не сказали, что у вас есть, либо я предполагаю некоторый вариант * nix, но вы можете быть явным. – thelatemail

+11

Разве это не 'R CMD BATCH'? – thelatemail

+0

@thelatemeail Это Ubuntu. – Sait

ответ

457

Если вы хотите, чтобы вывод на печать на терминале, лучше использовать Rscript

Rscript a.R 

Обратите внимание, что при использовании R CMD BATCH a.R что вместо перенаправление вывода на стандартный вывод и отображение на терминале будет создан новый файл с именем .Rout.

R CMD BATCH a.R 
# Check the output 
cat a.Rout 

Если вы действительно хотите использовать ./a.R способ вызова скрипта можно добавить соответствующий #! в верхней части сценария

#!/usr/bin/env Rscript 
sayHello <- function(){ 
    print('hello') 
} 

sayHello() 

Я также отметить, что если вы работаете на a * unix существует полезный пакет littler, который обеспечивает простую линию командной строки для R.

+19

Без #! ваша командная строка пытается запустить его как сценарий командной строки, используя тот же интерпретатор, который интерпретирует ваши команды. Он не знает, что он должен быть R, даже если файл заканчивается суффиксом .R или .r. #! сообщает командной строке, какой язык содержится в файле. – Spacedman

+3

Что, ничего о [littler] (http://dirk.eddelbuettel.com/code/littler.html)?

+3

Я запомнил несколько вопросов здесь на протяжении многих лет и могу ссылаться на Littler и Rscript. Главное - сказать людям, как и вы, что «R CMD BATCH» ужасно. Все, кроме этого ... –

16

Вам нужна команда ?Rscript для запуска сценария R с терминала.

Заканчивать http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html

Пример

## example #! script for a Unix-alike 

#! /path/to/Rscript --vanilla --default-packages=utils 
args <- commandArgs(TRUE) 
res <- try(install.packages(args)) 
if(inherits(res, "try-error")) q(status=1) else q() 
+2

Я не понял, что я буду делать с этим кодом? – Sait

+0

Это был всего лишь пример того, как вы пишете/запускаете скрипт R, в свой файл добавьте #!/Path/to/rscript, а затем chmod + x <ваш скрипт.r> и ./

26

Еще один способ запуска сценария R из командной строки:

R < scriptName.R --no-save 

или --save

найдено here

же StackOverflow question

63

Это не отвечает на вопрос напрямую. Но кто-то может оказаться здесь, потому что он/она хочет запустить oneliner R из терминала. Например, если вы просто хотите установить некоторые недостающие пакеты и выйти, этот oneliner может быть очень удобным. Я использую его много, когда вдруг узнаю, что мне не хватает некоторых пакетов, и я хочу установить их туда, где я хочу.

R -e 'install.packages(c("package1", "package2"))' # install to default location. 
sudo R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' # install to location that requires root. 
+2

Для запуска команды вы также можете использовать 'Rscript -e 'getwd()" 'в терминале. Rscript выводит только вывод команды, а не полное сообщение о запуске R. –

+0

Вы также можете использовать 'r -e 'cat (getwd(),' \ n ')", если у вас установлен littler. В [этом ответе] (http://stackoverflow.com/a/3205489/2641825) Дирк Эддельбуэттель объясняет разницу между littler и Rscript. –

+1

Почему бы не сделать это независимым вопросом и ответом? Это полезно. –

8

Как запустить RMD в команде с knitr и rmarkdown несколькими командами, а затем Загрузить файл HTML в RPubs

Вот пример: нагрузка две библиотеки и выполнить команду ¨R

R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")' 

R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")' 
+1

Обратите внимание, что будет проще пропустить загрузку библиотеки; 'R -e 'markdown :: rpubsUpload (" normalDev "," NormalDevconJuly.html ")'' – gregmacfarlane

0

Еще один способ использования Rscript для * Unix-систем - Process Substitution.

Rscript <(zcat a.r) 
# [1] "hello" 

который, очевидно, делает то же самое, как общепринятом ответ, но это позволяет вам управлять и запустить свой файл, не сохраняя его мощь командной строки, например:

Rscript <(sed s/hello/bye/ a.r) 
# [1] "bye" 

Подобно Rscript -e "Rcode" также позволяет работать без сохранения в файл. Поэтому его можно использовать в сочетании со сценариями, которые генерируют R-код, например:

Rscript <(echo "head(iris,2)") 
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
# 1   5.1   3.5   1.4   0.2 setosa 
# 2   4.9   3.0   1.4   0.2 setosa