Exécuter le script R à partir de la ligne de commande


484

J'ai un fichier, appelé a.r, il a un chmod755,

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

sayHello()

Comment puis-je l'exécuter via la ligne de commande?



5
tl; dr: ajoutez simplement comme première ligne de votre script:#!/usr/bin/env Rscript
michael

Réponses:


671

Si vous souhaitez que la sortie s'imprime sur le terminal, il est préférable d'utiliser Rscript

Rscript a.R

Notez que lorsque vous utilisez R CMD BATCH a.Rcela au lieu de rediriger la sortie vers la sortie standard et d'afficher sur le terminal, un nouveau fichier appelé a.Rout sera créé.

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

Une autre chose à noter à propos de l'utilisation de Rscript est qu'il ne charge pas le methodspackage par défaut, ce qui peut prêter à confusion. Donc, si vous comptez sur tout ce que les méthodes fournissent, vous voudrez le charger explicitement dans votre script.

Si vous voulez vraiment utiliser la ./a.Rfaçon d'appeler le script, vous pouvez ajouter un approprié #!en haut du script

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

sayHello()

Je noterai également que si vous utilisez un système * unix, il existe le package littler utile qui fournit une canalisation de ligne de commande facile à R. Il peut être nécessaire d'utiliser littler pour exécuter des applications brillantes via un script? Plus de détails peuvent être trouvés dans cette question .


28
Sans le #! votre ligne de commande essaie de l'exécuter en tant que script de ligne de commande, en utilisant le même interpréteur qui interprète vos commandes. Il ne sait pas que c'est censé être R, même si le fichier se termine par un suffixe .R ou .r. Le #! indique à la ligne de commande la langue contenue dans le fichier.
Spacedman

4
J'ai pris quelques questions ici au fil des ans et j'ai pu faire référence à la fois à littler et à Rscript. L'essentiel est de dire aux gens, comme vous l'avez fait, c'est R CMD BATCHterrible. Tout sauf ça ...
Dirk Eddelbuettel

@Dason Je travaille également avec le script R et j'essaie d'exécuter le script R à partir du programme Java et je vois une erreur. Voici ma question . Voyez si vous pouvez aider. J'utilise votre exemple de fonction bonjour pour l'instant pour le rendre simple.
user1950349

Existe-t-il un moyen de modifier le chemin d'accès à la bibliothèque dans la commande elle-même? Quelque chose de similaire àR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes

@mikemtnbikes Pas que je sache. On pourrait toujours ajouter quelque chose pour changer le .libPaths () à l'intérieur du script. Mais je ne vois aucune option comme celle indiquée dans la page de manuel de Rscript.
Dason

107

Cela ne répond pas directement à la question. Mais quelqu'un peut se retrouver ici parce qu'il veut exécuter une seule ligne de R à partir du terminal. Par exemple, si vous voulez simplement installer des paquets manquants et quitter, cet oneliner peut être très pratique. Je l'utilise beaucoup lorsque je découvre soudainement que certains packages me manquent et que je veux les installer où je veux.

  • Pour installer à l'emplacement par défaut:

    R -e 'install.packages(c("package1", "package2"))'
  • Pour installer à un emplacement qui nécessite des rootprivilèges:

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

5
Pour exécuter une commande, vous pouvez également utiliser Rscript -e "getwd()"dans le terminal. Rscript imprime uniquement la sortie de la commande et non le message de démarrage R complet.
Paul Rougieux

Vous pouvez également l'utiliser r -e "cat(getwd(),'\n')"si vous avez installé littler. Dans cette réponse, Dirk Eddelbuettel explique la différence entre littler et Rscript.
Paul Rougieux

2
Merci d'avoir anticipé mon problème! J'avais besoin d'une dernière chose:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Erin

4
Il faut utiliser R -r 'options(warn=2); install...'pour arrêter l'exécution et obtenir un code d'erreur non nul en cas d'échec de l'installation. Sinon, les install.packageserreurs ne sont que des avertissements.
rvernica


21

Vous avez besoin de la ?Rscriptcommande pour exécuter un script R à partir du terminal.

Consultez http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html

Exemple

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

Ce n'était qu'un exemple de la façon dont vous écririez / exécuter un script R, dans votre fichier, ajoutez le #! / Chemin / à / rscript puis chmod + x <votre script.r> et ./<votre script.r>
Mehul Rathod

10

Comment exécuter Rmd dans la commande avec knitr et rmarkdown par plusieurs commandes, puis télécharger un fichier HTML sur RPubs

Voici un exemple: chargez deux bibliothèques et exécutez une commande R

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

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

3
Notez qu'il sera plus simple de sauter le chargement de la bibliothèque; R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
gregmacfarlane

3

Une autre façon d'utiliser Rscript pour les systèmes * Unix est la substitution de processus .

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

Ce qui fait évidemment la même chose que la réponse acceptée, mais cela vous permet de manipuler et d'exécuter votre fichier sans lui faire économiser la puissance de la ligne de commande, par exemple:

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

Similaire à Rscript -e "Rcode"cela permet également d'exécuter sans enregistrer dans un fichier. Il pourrait donc être utilisé en conjonction avec des scripts qui génèrent du code R, par exemple:

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

Juste pour la documentation, vous devez parfois exécuter le script en tant que sudo:

sudo Rscript path/to/your/file.R

2
Quand faut-il faire ça?
simplegamer
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.