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


484

У мене є файл, званий a.r, він має chmod755,

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

sayHello()

Як я можу це запустити за допомогою командного рядка?



5
tl; dr: просто додайте як перший рядок свого сценарію:#!/usr/bin/env Rscript
michael

Відповіді:


671

Якщо ви хочете, щоб вихід друкувався до терміналу, найкраще використовувати Rscript

Rscript a.R

Зауважте, що при використанні R CMD BATCH a.Rцього замість перенаправлення виводу на стандартне виведення та відображення на терміналі буде створено новий файл під назвою a.Rout.

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

Ще одна річ, яку слід зазначити про використання Rscript, це те, що він не завантажує methodsпакет за замовчуванням, що може спричинити плутанину. Тож якщо ви покладаєтесь на все, що дає методи, ви хочете явно завантажити його у свій сценарій.

Якщо ви дійсно хочете скористатися ./a.Rспособом виклику сценарію, ви можете додати відповідну #!вершину сценарію

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

sayHello()

Я також зазначу, що якщо ви працюєте в системі * unix, є корисний пакет littler, який забезпечує просту передачу командного рядка до R. Можливо, для запуску блискучих програм за допомогою скрипту може знадобитися littler? Більш детальну інформацію ви можете знайти в цьому запитанні .


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

4
Я зловив кілька питань тут протягом багатьох років і міг посилатися як на littler, так і на Rscript. Головне - сказати людям, як і ти, що R CMD BATCHце жахливо. Все, окрім цього ...
Дірк Еддельбуеттель

@Dason Я також працюю зі сценарієм R, і я намагаюся виконати R-скрипт з програми Java, і я бачу деяку помилку. Ось моє запитання . Подивіться, чи можете ви допомогти. Я зараз використовую приклад функції привіт, щоб зробити це просто.
користувач1950349

Чи є спосіб змінити шлях бібліотеки в самій команді? Щось схоже наR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes

@mikemtnbikes Не те, про що я знаю. Завжди можна щось додати, щоб змінити .libPaths () всередині сценарію. Але я не бачу жодного варіанту, подібного до цього, вказаного на сторінці людини для Rscript.
Дейсон

107

Це не відповідає безпосередньо на питання. Але хтось може опинитися тут, тому що він хоче запустити oneliner R з терміналу. Наприклад, якщо ви просто хочете встановити якісь відсутні пакети та вийти, цей oneliner може бути дуже зручним. Я його дуже використовую, коли раптом дізнаюсь, що я пропускаю деякі пакунки, і хочу встановити їх там, де хочу.

  • Щоб встановити стандартне місце:

    R -e 'install.packages(c("package1", "package2"))'
  • Щоб встановити місце, де потрібні rootпривілеї:

    R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' 

5
Для запуску команди ви також можете використовувати Rscript -e "getwd()"в терміналі. Rscript друкує тільки командний вихід, а не повне R-повідомлення про запуск.
Пол Рудьо

Ви також можете використовувати, r -e "cat(getwd(),'\n')"якщо встановлено менше. У цій відповіді Дірк Еддельбуеттель пояснює різницю між Littler та Rscript.
Пол Рудьо

2
Дякую, що передбачили мою проблему! Мені потрібна була ще одна річ:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Ерін

4
Слід використовувати R -r 'options(warn=2); install...'для того, щоб зупинити виконання та отримати ненульовий код помилки на випадок встановлення. В іншому випадку будь-які install.packagesпомилки - це лише попередження.
rvernica


21

Вам потрібна ?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()

Це був лише приклад того, як ви будете писати / запускати R-скрипт, у свій файл додайте #! / Path / to / rscript, а потім chmod + x <ваш script.r> та ./<your script.r>
Мехул Ратод

10

Як запустити Rmd в команді Knr і rmarkdown за допомогою декількох команд, а потім Завантажити HTML-файл у RPubs

Ось приклад: завантажте дві бібліотеки і виконайте команду R

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

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

3
Зверніть увагу, що пропустити завантаження бібліотеки буде простіше; R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
gregmacfarlane

3

Ще один спосіб використання 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

3

Тільки для документації, іноді потрібно запустити скрипт як sudo:

sudo Rscript path/to/your/file.R

2
Коли вам це потрібно зробити?
simplegamer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.