Mis a jour le 2016-05-22, 16:22

Syntaxe de base

Les commentaires commencent par '#' (mettre '##' sous le mode emacs ESS pour avoir un affichage "electric" correct avec "tab").
Les différents "lignes" de code peuvent être séparées par des retours chariots et/ou des ';' (';' non nécessaire en fin de ligne, sauf si plusieurs ordres par ligne).
On peut grouper des expressions avec {} et le résultat est la dernière expression : {expr1; expr2; ... ; exprk}
if : comme en C :
Boucles :
switch : évalue le premier argument. Si c'est un nombre, retourne l'élément de numéro correspondant de la liste. Si c'est une chaîne, retourne l'élément nommé correspondant. Le dernier argument est la valeur par défaut :
ifelse : teste la première valeur. Si elle est vraie, renvoie la 2ème, sinon renvoie la 3ème (équivalent de "? : " en C) :
Fonctions :
Argument spécial "..." d'une fonction : elle peut avoir cet argument spécial dans sa définition qui pourra être repassé tel quel dans l'appel d'une autre fonction :
> func <- function(x, ...) {print(x); print(paste(..., sep = ","));}
> func("a", "b", "c")
[1] "a"
[1] "b,c"
(c'est vraiment la chaîne "..." qu'il faut indiquer !).
missing : permet de tester si un argument est manquant lors de l'appel d'une fonction :
f <- function(a, b) {
  if (missing(a))
    print("a is missing")
  if (missing(b))
    print("b is missing")
}

f(b = 3)
  
donne
a is missing
  
Evaluation d'une fonction : si func <- function(x, y) {return((x + 1) * y)} :
Une fonction peut contenir ses propres définitions de fonctions qui restent alors internes à la fonction (inaccessibles à l'extérieur). Mais, elle peut retourner une fonction ! Exemple :
func <- function(a) {return(function(x) {return(x + a)})}
Alors, do.call(func(4), list(5)) : renvoie 9 !
Manière standard pour une fonction de renvoyer plusieurs valeurs (par exemple, un dataframe, une matrice et un vecteur : renvoyer une liste de ces éléments.
stop("error message") : interrompt l'exécution du programme et imprime le message.
stopifnot(exp1, exp2, ...) : interrompt l'exécution du programme si l'une des expressions n'est pas TRUE et indique alors la première expression pour laquelle la condition n'est pas vérifiée.
quit("no") (ou q("no")) : permet de terminer le programme sans afficher de message d'erreur (et sans sauvegarder le contexte, d'où le "no"). On peut par exemple faire :
if (length(commandArgs(TRUE)) != 1) {
    writeLines("Usage : myScript.R <inputFile>\n", stderr())
    quit("no")
}
  

Copyright Aymeric Duclert
programmer en R, tutoriel R, graphes en R