Ho un file, chiamato a.r
, ha un chmod
755,
sayHello <- function(){
print('hello')
}
sayHello()
Come posso eseguirlo tramite riga di comando?
#!/usr/bin/env Rscript
Ho un file, chiamato a.r
, ha un chmod
755,
sayHello <- function(){
print('hello')
}
sayHello()
Come posso eseguirlo tramite riga di comando?
#!/usr/bin/env Rscript
Risposte:
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.R
quello 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 methods
pacchetto 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.R
modo 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 .
R CMD BATCH
è terribile. Nient'altro che ...
R CMD INSTALL -l ~/R/lib-dev
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 root
privilegi:
R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")'
Rscript -e "getwd()"
nel terminale. Rscript stamperà solo l'output del comando e non il messaggio di avvio R completo.
r -e "cat(getwd(),'\n')"
se hai installato littler. In questa risposta Dirk Eddelbuettel spiega la differenza tra littler e Rscript.
R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
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.packages
errore è solo un avvertimento.
Un altro modo di eseguire uno script R dalla riga di comando sarebbe:
R < scriptName.R --no-save
o con --save
.
Vedi anche Qual è il modo migliore per usare gli script R sulla riga di comando (terminale)? .
È necessario il ?Rscript
comando 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()
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")'
R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
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
Solo per la documentazione, a volte è necessario eseguire lo script come sudo
:
sudo Rscript path/to/your/file.R