Eu tenho um arquivo chamado a.r
, ele tem um chmod
de 755,
sayHello <- function(){
print('hello')
}
sayHello()
Como posso executar isso via linha de comando?
#!/usr/bin/env Rscript
Eu tenho um arquivo chamado a.r
, ele tem um chmod
de 755,
sayHello <- function(){
print('hello')
}
sayHello()
Como posso executar isso via linha de comando?
#!/usr/bin/env Rscript
Respostas:
Se você deseja que a saída seja impressa no terminal, é melhor usar o Rscript
Rscript a.R
Observe que ao usá- R CMD BATCH a.R
lo em vez de redirecionar a saída para a saída padrão e exibir no terminal, um novo arquivo chamado a.Rout será criado.
R CMD BATCH a.R
# Check the output
cat a.Rout
Outra coisa a ser observada sobre o uso do Rscript é que ele não carrega o methods
pacote por padrão, o que pode causar confusão. Portanto, se você confiar em algo que os métodos fornecem, você precisará carregá-lo explicitamente em seu script.
Se você realmente deseja usar a ./a.R
maneira de chamar o script, adicione um apropriado #!
à parte superior do script
#!/usr/bin/env Rscript
sayHello <- function(){
print('hello')
}
sayHello()
Também observarei que, se você estiver executando em um sistema * unix, existe o pacote littler útil , que fornece canalização fácil da linha de comando para R. Pode ser necessário usar o littler para executar aplicativos brilhantes por meio de um script? Mais detalhes podem ser encontrados nesta pergunta .
R CMD BATCH
é terrível. Tudo menos isso ...
R CMD INSTALL -l ~/R/lib-dev
Isso não responde diretamente à pergunta. Mas alguém pode acabar aqui porque quer executar um oneliner R no terminal. Por exemplo, se você deseja instalar apenas alguns pacotes ausentes e sair, este oneliner pode ser muito conveniente. Uso muito quando de repente descubro que sinto falta de alguns pacotes e quero instalá-los onde quiser.
Para instalar no local padrão:
R -e 'install.packages(c("package1", "package2"))'
Para instalar em um local que requer root
privilégios:
R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")'
Rscript -e "getwd()"
no terminal. O Rscript imprimirá apenas a saída do comando e não a mensagem de inicialização completa do R.
r -e "cat(getwd(),'\n')"
se você tiver um pouco instalado. Em esta resposta Dirk Eddelbuettel explica a diferença entre littler e RSCRIPT.
R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
R -r 'options(warn=2); install...'
para interromper a execução e obter um código de erro diferente de zero, caso a instalação falhe. Caso contrário, quaisquer install.packages
erros são apenas avisos.
Mais uma maneira de executar um script R a partir da linha de comando seria:
R < scriptName.R --no-save
ou com --save
.
Consulte também Qual é a melhor maneira de usar scripts R na linha de comando (terminal)? .
Você precisa do ?Rscript
comando para executar um script R no terminal.
Confira http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html
Exemplo
## 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()
Como executar o Rmd no comando com knitr e rmarkdown por vários comandos e, em seguida, carregar um arquivo HTML nos RPubs
Aqui está um exemplo: carregue duas bibliotecas e execute um comando 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")'
Outra maneira de usar o Rscript para sistemas * Unix é a Substituição de Processo .
Rscript <(zcat a.r)
# [1] "hello"
O que obviamente faz o mesmo que a resposta aceita, mas isso permite que você manipule e execute seu arquivo sem economizar o poder da linha de comando, por exemplo:
Rscript <(sed s/hello/bye/ a.r)
# [1] "bye"
Semelhante a Rscript -e "Rcode"
ele também permite executar sem salvar em um arquivo. Portanto, poderia ser usado em conjunto com scripts que geram código R, por exemplo:
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
Apenas para documentação, às vezes você precisa executar o script como sudo
:
sudo Rscript path/to/your/file.R