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.