Execute o script R na linha de comando

484

Eu tenho um arquivo chamado a.r, ele tem um chmodde 755,

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

sayHello()

Como posso executar isso via linha de comando?

Sait
fonte
3
Possível duplicata de Qual é a melhor maneira de usar scripts R na linha de comando?
Ciro Santilli escreveu:
5
tl; dr: basta adicionar como primeira linha do seu script:#!/usr/bin/env Rscript
michael

Respostas:

671

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.Rlo 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 methodspacote 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.Rmaneira 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 .

Dason
fonte
28
Sem o #! sua linha de comando tenta executá-lo como um script de linha de comando, usando o mesmo intérprete que interpreta seus comandos. Ele não sabe que é R, mesmo que o arquivo termine com o sufixo .R ou .r. O #! informa à linha de comando qual idioma está contido no arquivo.
precisa saber é o seguinte
4
Eu peguei algumas perguntas aqui ao longo dos anos e pude referenciar tanto o menor quanto o Rscript. O principal é dizer às pessoas, como você fez, que R CMD BATCHé terrível. Tudo menos isso ...
Dirk Eddelbuettel
@Dason Também estou trabalhando com o script R e estou tentando executar o script R a partir do programa Java e estou vendo algum erro. Aqui está a minha pergunta . Veja se você pode ajudar. Por enquanto, estou usando o seu exemplo de função hello para simplificar.
user1950349
Existe uma maneira de modificar o caminho da biblioteca no próprio comando? Algo semelhante aR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes 26/03/19
@mikemtnbikes Não que eu saiba. Sempre se pode adicionar algo para alterar o .libPaths () dentro do script. Mas não vejo nenhuma opção como essa apontada na página de manual do Rscript.
Dason 27/03/19
107

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 rootprivilégios:

    R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' 
biocibernético
fonte
5
Para executar um comando, você também pode usar 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.
Paul Rougieux
Você também pode usar r -e "cat(getwd(),'\n')"se você tiver um pouco instalado. Em esta resposta Dirk Eddelbuettel explica a diferença entre littler e RSCRIPT.
Paul Rougieux
2
Obrigado por antecipar o meu problema! Eu precisava de mais uma coisa:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Erin
4
Deve-se usar 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.packageserros são apenas avisos.
Rvernica
21

Você precisa do ?Rscriptcomando 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()
Mehul Rathod
fonte
Este foi apenas um exemplo de como você escreveria / executaria um script R; no seu arquivo, adicione o #! / Path / to / rscript e, em seguida, chmod + x <seu script.r> e ./< seu script.r>
Mehul Rathod
10

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")'
Shicheng Guo
fonte
3
Observe que será mais simples pular o carregamento da biblioteca; R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
Gregmacfarlane
3

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
Sebastian Müller
fonte
3

Apenas para documentação, às vezes você precisa executar o script como sudo:

sudo Rscript path/to/your/file.R
Cro-Magnon
fonte
2
Quando você precisa fazer isso?
simplegamer 6/09/19