Parcours
/
R
R
/
Programme
/
Les bases
Le

Les bases en R

1 exercice

À propos de Les bases

Variables et affectation

R est un langage à typage dynamique, donc en général il n'est pas nécessaire de préciser le type d'une variable. Le type par défaut est numeric, généralement implémenté comme un nombre à virgule flottante en double précision. Pour forcer l'utilisation d'entiers 32 bits, on utilise le suffixe L (abréviation de Long).

Obtenir le « type » d'un objet est (pour des raisons historiques) potentiellement déroutant. Les fonctions typeof() et class() sont similaires, mais peuvent renvoyer des résultats légèrement différents :

typeof(50)
#> [1] "double"  # more specific: an implementation detail
typeof(50L)
##> [1] "integer"

class(50)
#> [1] "numeric"  # less specific: ignores implementation details
class(50L)
#> [1] "integer"
Advanced

Tu peux aussi rencontrer des références à mode(), qui est similaire à typeof().

Ignore mode() et storage.mode(). Ils ne sont fournis que pour la rétrocompatibilité.

L'opérateur d'affectation à privilégier est <-. Si tu travailles dans RStudio, tu peux le saisir avec le raccourci clavier Alt-minus.

x <- 42
avogadro <- 6.02e23
mystr <- "Hello, World!"

Utiliser = au lieu de <- fonctionne souvent, mais pas toujours, et c'est déconseillé comme mauvais style.

Les opérateurs sont pour la plupart similaires à ceux de beaucoup d'autres langages, même si %% et %/% sont plus inhabituels. Cette syntaxe avec % est une façon d'appeler des opérateurs infixes implémentés sous forme de macros.

2 + 3   # 5
2 - 3   # -1
2 * 3   # 6
2 / 3   # 0.6666667
8 %/% 3 # 2 (integer division)
8 %% 3  # 2 (remainder)
2 ^ 3   # 8 (exponential)

En R, # commence un commentaire sur une seule ligne. Il n'existe pas de syntaxe distincte pour les commentaires multilignes.

Fonctions

Pour définir une fonction :

squareit <- function(x) {
    x * x
}

Les fonctions peuvent prendre zéro ou plusieurs arguments, séparés par des virgules. Les parenthèses () sont nécessaires avec function(), même s'il n'y a aucun paramètre.

On peut spécifier des valeurs par défaut pour les arguments d'une fonction, mais celles-ci doivent venir après tous les arguments sans valeur par défaut, et il faut utiliser = et non <- pour affecter la valeur par défaut. Un exemple plutôt inutile :

squareit <- function(x = 42) {
    x * x
}

squareit()
#> [1] 1764

Les accolades { } ne sont pas strictement nécessaires pour un corps de fonction sur une seule ligne, mais les inclure est considéré comme un bon style.

R renvoie automatiquement la valeur finale d'une fonction, comme dans les exemples ci-dessus.

On peut utiliser return() n'importe où dans le corps de la fonction pour rendre explicite une valeur de retour. Elle renvoie immédiatement la valeur spécifiée et termine la fonction sans exécuter les autres expressions du corps de la fonction.

Un appel explicite à return() n'est généralement nécessaire que si l'on veut sortir de la fonction plus tôt et renvoyer une valeur précise pour une raison ou une autre. On peut par exemple le faire dans une clause if-else.

Certains développeurs préfèrent toutefois les return explicites, par choix de style de code.

Appeler une fonction se fait comme dans beaucoup d'autres langages :

squareit(3)
#> [1] 9

Nous verrons dans de futurs concepts que le résultat 9 est en fait un vecteur de longueur 1 plutôt qu'un nombre scalaire. D'où la présence de [1] pour indiquer que c'est le début du vecteur.

is.vector(9)
#> [1] TRUE

La plupart des choses en R sont une sorte de vecteur !

Note

La console R afficherait l'exemple ci-dessus ainsi :

> squareit(3)
[1] 9

Les documents de ce programme suivent en grande partie la convention utilisée dans plusieurs manuels de R, en supprimant l'invite et en commentant le résultat. Cela facilite le copier-coller des exemples de code dans la console pour les exécuter.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet

Apprends Les bases