У меня есть файл, называется a.r
, он имеет chmod
755,
sayHello <- function(){
print('hello')
}
sayHello()
Как я могу запустить это через командную строку?
#!/usr/bin/env Rscript
У меня есть файл, называется a.r
, он имеет chmod
755,
sayHello <- function(){
print('hello')
}
sayHello()
Как я могу запустить это через командную строку?
#!/usr/bin/env Rscript
Ответы:
Если вы хотите, чтобы вывод выводился на терминал, лучше всего использовать 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 для запуска блестящих приложений через скрипт? Более подробную информацию можно найти в этом вопросе .
R CMD BATCH
это ужасно. Все, кроме этого ...
R CMD INSTALL -l ~/R/lib-dev
Это не отвечает на вопрос напрямую. Но кто-то может оказаться здесь, потому что он хочет запустить терминал R из терминала. Например, если вы просто хотите установить несколько отсутствующих пакетов и выйти, этот oneliner может быть очень удобным. Я часто использую его, когда вдруг обнаруживаю, что пропускаю некоторые пакеты, и хочу установить их там, где я хочу.
Для установки в папку по умолчанию:
R -e 'install.packages(c("package1", "package2"))'
Чтобы установить в место, которое требует root
привилегий:
R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")'
Rscript -e "getwd()"
в терминале. Rscript будет печатать только выходные данные команды, а не полное сообщение о запуске R.
r -e "cat(getwd(),'\n')"
если у вас установлен littler. В этом ответе Дирк Эддельбюттель объясняет разницу между Литтлером и Rscript.
R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
R -r 'options(warn=2); install...'
, чтобы остановить выполнение и получить ненулевой код ошибки в случае сбоя установки. В противном случае любые install.packages
ошибки являются просто предупреждениями.
Еще один способ запуска сценария R из командной строки:
R < scriptName.R --no-save
или с --save
.
Смотрите также Как лучше всего использовать R-скрипты в командной строке (терминале)? ,
Вам нужна ?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()
Как запустить Rmd в команде с knitr и rmarkdown несколькими командами, а затем загрузить файл HTML в RPubs
Вот пример: загрузите две библиотеки и выполните команду R
R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")'
R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'
R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
Еще один способ использования 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
Просто для документации, иногда вам нужно запустить скрипт как sudo
:
sudo Rscript path/to/your/file.R