Exécuter un script R

Auteur.e.s
Annie Bouvier, A Haddad, Inra
Résumé

On appelle ici script R, un fichier contenant des commandes R à faire exécuter.

Exécution dans une session R

La fonction source() permet d’exécuter un script R depuis la console. Elle n’a qu’un argument obligatoire qui est le nom du script.

Soit le fichier exemple.R contenant

a <- 10
b <- 5
res <- paste("a=",a,", b=",b," et leur produit est ",a*b, sep="")
print(res)

L’instruction suivante:

source(file = "exemple.R")

provoque l’exécution dans la session R des commandes contenues dans le fichier et fournit la sortie suivante:

[1] "a=10, b=5 et leur produit est 50"

Les instructions sont exécutées une à une et dans l’ordre comme elles le seraient lors d’une session interactive.

Par défaut, n’apparait à l’écran que le résultat de l’exécution.

La fonction source() possède plusieurs arguments

source(file, local = FALSE, echo = verbose, print.eval = echo, exprs,
    spaced = use_file, verbose = getOption("verbose"),
    prompt.echo = getOption("prompt"), max.deparse.length = 150,
    width.cutoff = 60L, deparseCtrl = "showAttributes", chdir = FALSE,
    encoding = getOption("encoding"),
    continue.echo = getOption("continue"), skip.echo = 0,
    keep.source = getOption("keep.source"))

dont les principaux sont

  • local indique où sont évaluées les instructions du script. La valeur FALSE indique que l’on utilise l’environnement de l’utilisateur; la valeur TRUE implique que l’on utilise l’environnement depuis lequel le script est évalué

  • echo indique si les instructions contenues dans le script doivent être affichées. La valeur par défaut est celle prise par l’option verbose

  • encoding indique l’encodage utilisé par le script. La valeur par défaut est celle prise par l’option encoding

  • chdir permet de modifier (chdir=TRUE) temporairement le répertoire de travail pour celui d’où est appelé le script

Les valeurs par défaut des arguments verbose et encoding sont obtenues avec la fonction getOption()

getOption("verbose")
[1] FALSE
getOption("encoding")
[1] "native.enc"

Exemple avec echo=TRUE: affichage des lignes de commande

source(file = "exemple.R", echo = TRUE)

> a <- 10

> b <- 5

> res <- paste("a=", a, ", b=", b, " et leur produit est ", 
+     a * b, sep = "")

> print(res)
[1] "a=10, b=5 et leur produit est 50"

Pour en savoir plus sur la fonction source(), voir le tutoriel Exécuter un script: la fonction source()

Exécution depuis un terminal

Le script R peut aussi être exécuté depuis une fenêtre Terminal, c’est à dire sans être obligé de lancer une session R, par les commandes R CMD BATCH, Rscript ou R --vanilla.

La commande R CMD BATCH

Cette commande a pour argument le nom du script. Elle exécute les instructions qu’il contient. La syntaxe générale est:

R CMD BATCH [options] infile [outfile]
  • infile est le nom du fichier qui contient le script R,
  • outfile est le nom du fichier dans lequel seront écrits les résultats (par défaut, c’est le nom du script avec l’extention .Rout) et
  • options est une liste d’options.

Sur l’exemple précédent, la commande

fdessaint$ R CMD BATCH exemple.R

crée un fichier exemple.Rout contenant

R version 3.4.2 (2017-09-28) -- "Short Summer"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin15.6.0 (64-bit)

R est un logiciel libre livré sans AUCUNE GARANTIE.
Vous pouvez le redistribuer sous certaines conditions.
Tapez 'license()' ou 'licence()' pour plus de détails.

R est un projet collaboratif avec de nombreux contributeurs.
Tapez 'contributors()' pour plus d'information et
'citation()' pour la façon de le citer dans les publications.

Tapez 'demo()' pour des démonstrations, 'help()' pour l'aide
en ligne ou 'help.start()' pour obtenir l'aide au format HTML.
Tapez 'q()' pour quitter R.

> a <- 10
> b <- 5
> res <- paste("a=",a,", b=",b," et leur produit est ",a*b, sep="")
> print(res)
[1] "a=10, b=5 et leur produit est 50"
> 
> proc.time()
utilisateur     système      écoulé 
      0.169       0.025       0.214 

L’option -q

L’option -q évite l’affichage du message d’accueil.

fdessaint$ R CMD BATCH -q exemple.R

Le fichier exemple.Rout contient alors:

> a <- 10
> b <- 5
> res <- paste("a=",a,", b=",b," et leur produit est ",a*b, sep="")
> print(res)
[1] "a=10, b=5 et leur produit est 50"
> 
> proc.time()
utilisateur     système      écoulé 
      0.159       0.023       0.173 

Utilisation d’arguments

Lorsque le script R utilise des variables que l’on souhaite modifier d’une exécution à l’autre (des arguments), on invoque R CMD BATCH avec l’option --args. Dans le source R, on récupère les arguments avec la fonction commandArgs(). Soit le script exempleM.R contenant les lignes suivantes:

variable <- commandArgs(trailingOnly=TRUE)
a <- as.numeric(variable[1])
b <- as.numeric(variable[2])
res <- paste("a=",a,", b=",b," et leur produit est ",a*b, sep="")
print(res)

L’argument de commandArgs(), trailingOnly=TRUE, indique que l’on ne souhaite récupérer que les arguments additionnels et pas l’ensemble de la ligne de commande. Attention, si on a des arguments numériques, il faut les convertir, par exemple, par as.numeric() car ils sont récupérés en “character”

On lance l’exécution du script en tapant dans une fenêtre Terminal la commande

fdessaint$ R CMD BATCH "--args 20 3" exempleM.R

Le fichier exempleM.Rout contient le résultat de l’exécution.

R version 3.4.2 (2017-09-28) -- "Short Summer"
Copyright (C) 2017 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin15.6.0 (64-bit)

R est un logiciel libre livré sans AUCUNE GARANTIE.
Vous pouvez le redistribuer sous certaines conditions.
Tapez 'license()' ou 'licence()' pour plus de détails.

R est un projet collaboratif avec de nombreux contributeurs.
Tapez 'contributors()' pour plus d'information et
'citation()' pour la façon de le citer dans les publications.

Tapez 'demo()' pour des démonstrations, 'help()' pour l'aide
en ligne ou 'help.start()' pour obtenir l'aide au format HTML.
Tapez 'q()' pour quitter R.

[Sauvegarde de la session précédente restaurée]

> variable <- commandArgs(trailingOnly=TRUE)
> a <- as.numeric(variable[1])
> b <- as.numeric(variable[2])
> res <- paste("a=",a,", b=",b," et leur produit est ",a*b, sep="")
> print(res)
[1] "a=20, b=3 et leur produit est 60"
> 
> proc.time()
utilisateur     système      écoulé 
      0.182       0.030       0.244 

La commande Rscript

La commande Rscript permet aussi d’exécuter un script depuis une fenêtre Terminal.

fdessaint$ Rscript exemple.R
[1] "a=10, b=5 et leur produit est 50"

Utilisation d’arguments

Rscript permet aussi l’exécution de scripts R qui ont des arguments. On transmet leurs valeurs des arguments sur la ligne de commande de Rscript. Dans le source R, comme précédemment, les arguments sont récupérés par la fonction commandArgs(). On lance l’exécution du script en tapant dans une fenêtre Terminal la commande

fdessaint$ Rscript exempleM.R 20 3

20 et 3 étant ici les valeurs des arguments du script récupérés par commandArgs(), et on obtient, dans la fenêtre Terminal, le résultat de l’exécution:

[1] "a=20, b=3 et leur produit est 60"

Utilisation de Rscript dans un script shell

Le script R peut être rendu directement exécutable depuis le shell, en procédant ainsi:

  1. Créer un fichier, par exemple exempleS.R, contenant le code R,

  2. Mettre en tête du fichier le «shebang», i.e, #!/usr/bin/Rscript, si Rscript est installé dans /usr/bin/

  3. Récupérer les arguments dans le code R, s’il y en a : args <- commandArgs(TRUE). S’il y a des arguments numériques, les convertir.

  4. Rendre le fichier exécutable : chmod +x exempleS.R

  5. Lancer le script en lui passant les arguments éventuels : ./exempleS.R arg1 arg2 ...

Exemple: le fichier exempleS.R

#!/usr/bin/Rscript --slave
argv <- commandArgs(TRUE)
x <- as.numeric(argv[1])
y <- as.numeric(argv[2])
cat("x =", x, "\n")
cat("y =", y, "\n")

On le rend exécutable:

chmod +x exempleS.R

On l’exécute:

./exempleS.R 2  3.1415

Remarque 1 : l’option –slave opère comme –quiet mais rend R encore moins verbeux, en inhibant l’écho de l’entrée.

Remarque 2 : sans le «shebang», on aurait fait Rscript –slave exempleS.R 2 3.1415

Sur Windows, on ne peut pas utiliser le «shebang»: on doit donc utiliser Rscript ainsi dans un fichier .bat

La commande R --vanilla

Cette commande a pour entrée le nom du script. Elle exécute les instructions qu’il contient. La syntaxe générale est:

R --vanilla <  infile
R -q --vanilla <  infile
R --vanilla  arg1 arg2 ... argn < infile

L’option - q a la même signification qu’avec R CMD BATCH: rendre R quiet.

Les arguments sont récupéres dans le script R par la commande commandArgs(), vue ci-dessus.

Versions des outils utilisés
R version 3.4.2 (2017-09-28)
Thèmes de la fiche
Thèmes