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 valeurFALSE
indique que l’on utilise l’environnement de l’utilisateur; la valeurTRUE
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’optionverbose
-
encoding
indique l’encodage utilisé par le script. La valeur par défaut est celle prise par l’optionencoding
-
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
) etoptions
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:
-
Créer un fichier, par exemple
exempleS.R
, contenant le code R, -
Mettre en tête du fichier le «shebang», i.e,
#!/usr/bin/Rscript
, siRscript
est installé dans/usr/bin/
-
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. -
Rendre le fichier exécutable :
chmod +x exempleS.R
-
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.