Запустить R скрипт из командной строки

378

У меня есть файл, называемый a.r, он имеет chmod из 755,

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

sayHello()

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

Теги:
command-line

7 ответов

575
Лучший ответ

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

Rscript a.R

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

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

Еще одна вещь, которую стоит отметить при использовании Rscript, это то, что он не загружает пакет methods по умолчанию, что может вызвать путаницу. Поэтому, если вы полагаетесь на все, что предоставляют методы, вы захотите явно загрузить это в свой скрипт.

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

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

sayHello()

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

  • 24
    Без #! ваша командная строка пытается запустить его как сценарий командной строки, используя тот же интерпретатор, который интерпретирует ваши команды. Он не знает, что он должен быть R, даже если файл заканчивается суффиксом .R или .r. #! сообщает командной строке, какой язык содержится в файле.
  • 4
    Я поймал несколько вопросов здесь за эти годы и мог ссылаться как на Литтлера, так и на Rscript. Главное, как и вы, сказать людям, что R CMD BATCH ужасна. Все, кроме этого ...
Показать ещё 6 комментариев
81

Это не отвечает на вопрос напрямую. Но кто-то может оказаться здесь, потому что он хочет запустить терминал 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. 
  • 4
    Для запуска команды вы также можете использовать Rscript -e "getwd()" в терминале. Rscript будет печатать только вывод команды, а не полное сообщение о запуске R.
  • 0
    Вы также можете использовать r -e "cat(getwd(),'\n')" если у вас установлен littler. В этом ответе Дирк Эддельбюттель объясняет разницу между Литтлером и Rscript.
Показать ещё 3 комментария
31

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

R < scriptName.R --no-save  

или с --save.

Смотрите также Как лучше всего использовать R-сценарии в командной строке (терминале)? ,

16

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

Отъезд 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
    Я не понял, что я собираюсь делать с этим кодом?
  • 0
    Это был просто пример того, как вы бы написали / запустили скрипт R, в вашем файле добавьте #! / Path / to / rscript, а затем chmod + x <your script.r> и ./<your script.r>
9

Как запустить 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")'
2

Просто для документации. Иногда вам нужно запустить скрипт как sudo:

sudo Rscript path/to/your/file.R
2

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню