Esegui lo script R dalla riga di comando


Risposte:


671

Se si desidera che l'output venga stampato sul terminale, è consigliabile utilizzare Rscript

Rscript a.R

Si noti che quando si utilizza R CMD BATCH a.Rquello invece di reindirizzare l'output allo standard out e visualizzare sul terminale verrà creato un nuovo file chiamato a.Rout.

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

Un'altra cosa da notare sull'uso di Rscript è che non carica il methodspacchetto per impostazione predefinita, il che può causare confusione. Quindi, se fai affidamento su qualcosa che i metodi forniscono, ti consigliamo di caricarlo esplicitamente nel tuo script.

Se vuoi davvero usare il ./a.Rmodo di chiamare lo script, potresti aggiungere un appropriato #!nella parte superiore dello script

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

sayHello()

Noterò anche che se stai eseguendo un sistema * unix c'è l'utile pacchetto littler che fornisce un facile reindirizzamento della riga di comando a R. Potrebbe essere necessario usare littler per eseguire app brillanti tramite uno script? Ulteriori dettagli sono disponibili in questa domanda .


28
Senza il #! la tua riga di comando tenta di eseguirla come uno script della riga di comando, utilizzando lo stesso interprete che interpreta i tuoi comandi. Non sa che dovrebbe essere R, anche se il file termina con un suffisso .R o .r. Il #! indica alla riga di comando quale lingua è contenuta nel file.
Spacedman

4
Ho preso alcune domande qui nel corso degli anni e sono stato in grado di fare riferimento sia a Littler che a Rscript. La cosa principale è dire alla gente, come hai fatto, che R CMD BATCHè terribile. Nient'altro che ...
Dirk Eddelbuettel,

@Dason Sto anche lavorando con R script e sto cercando di eseguire lo script R dal programma Java e vedo qualche errore. Ecco la mia domanda . Vedi se riesci a dare una mano. Sto usando il tuo esempio di funzione ciao per ora per renderlo semplice.
user1950349

C'è un modo per modificare il percorso della libreria nel comando stesso? Qualcosa di simile aR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes il

@mikemtnbikes Non che io sappia. Si potrebbe sempre aggiungere qualcosa per modificare .libPaths () all'interno dello script. Ma non vedo nessuna opzione del genere indicata nella pagina man di Rscript.
Dason,

107

Questo non risponde direttamente alla domanda. Ma qualcuno potrebbe finire qui perché vogliono eseguire un oneliner di R dal terminale. Ad esempio, se vuoi solo installare alcuni pacchetti mancanti ed uscire, questo oneliner può essere molto conveniente. Lo uso molto quando all'improvviso scopro che mi mancano alcuni pacchetti e voglio installarli dove voglio.

  • Per installare nella posizione predefinita:

    R -e 'install.packages(c("package1", "package2"))'
  • Per installare in un percorso che richiede rootprivilegi:

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

5
Per eseguire un comando è possibile utilizzare anche Rscript -e "getwd()"nel terminale. Rscript stamperà solo l'output del comando e non il messaggio di avvio R completo.
Paul Rougieux,

Puoi anche usarlo r -e "cat(getwd(),'\n')"se hai installato littler. In questa risposta Dirk Eddelbuettel spiega la differenza tra littler e Rscript.
Paul Rougieux,

2
Grazie per aver anticipato il mio problema! Avevo bisogno di un'altra cosa:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Erin,

4
Si dovrebbe usare R -r 'options(warn=2); install...'per interrompere l'esecuzione e ottenere un codice di errore diverso da zero nel caso in cui l'installazione non riesca. Altrimenti, qualsiasi install.packageserrore è solo un avvertimento.
rvernica,


21

È necessario il ?Rscriptcomando per eseguire uno script R dal terminale.

Dai un'occhiata a http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html

Esempio

## 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()

Questo era solo un esempio di come avresti scritto / eseguito uno script R, nel tuo file aggiungi #! / Path / to / rscript e poi chmod + x <your script.r> e ./<your script.r>
Mehul Rathod,

10

Come eseguire Rmd al comando con knitr e rmarkdown da più comandi e quindi caricare un file HTML su RPubs

Ecco un esempio: carica due librerie ed esegui un comando R.

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

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

3
Si noti che sarà più semplice saltare il caricamento della libreria; R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
gregmacfarlane,

3

Un altro modo per utilizzare Rscript per i sistemi * Unix è la sostituzione di processo .

Rscript <(zcat a.r)
# [1] "hello"

Il che ovviamente fa lo stesso della risposta accettata, ma ciò ti consente di manipolare ed eseguire il tuo file senza salvarlo dalla potenza della riga di comando, ad esempio:

Rscript <(sed s/hello/bye/ a.r)
# [1] "bye"

Simile ad Rscript -e "Rcode"esso consente anche di eseguire senza salvare in un file. Quindi potrebbe essere utilizzato insieme a script che generano codice R, ad esempio:

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

Solo per la documentazione, a volte è necessario eseguire lo script come sudo:

sudo Rscript path/to/your/file.R

2
Quando hai bisogno di farlo?
Simplegamer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.