Chapter 27 Accessibilité des variables

Il est essentiel de pouvoir situer nos variables, et de savoir si elles sont définies et accessibles.

  1. Les variables définies à l’intérieur d’une fonction ne sont pas accessibles à l’extérieur de la fonction!

  2. Les variables définies à l’extérieur d’une fonction sont accessibles à l’intérieur, mais ce n’est jamais une bonne idée! Votre fonction ne fonctionnera plus si la variable extérieure est effacée!

Faites très attention lorsque vous créez des variables à l’intérieur d’une condition, car la variable pourrait ne jamais être créée et causer des erreurs (parfois imperceptibles).

var1 <- 3  # 'var1' est définie à l'extérieur de la fonction
vartest <- function() {
    a <- 4  # 'a' est définie a l'intérieur
    print(a)  # affiche 'a'
    print(var1)  # affiche 'var1'
}

a  # on ne peut pas afficher 'a', car 'a' n'existe qu'à l'intérieur de la fonction
## [1] 20.84267
vartest()  # cvartest() affiche 'a' et 'var1'
## [1] 4
## [1] 3
rm(var1)  # supprime 'var1'
vartest()  # la fonction ne fonctionne plus, car 'var1' n'existe plus!
## [1] 4
## Error in vartest(): object 'var1' not found

Utilisez des arguments!

De plus, à l’intérieur d’une fonction, les noms d’arguments remplaceront les noms des autres variables.

var1 <- 3  # var1 est définie à l'extérieur de la fonction
vartest <- function(var1) {
    print(var1)  # affiche var1
}

vartest(8)  # Dans notre fonction, var1 est maintenant notre argument et prend sa valeur
## [1] 8
var1  # var1 a toujours la même valeur à l'extérieur de la fonction
## [1] 3

Une bonne pratique serait de définir les variables à l’extérieur de la condition, puis ensuite de modifier leurs valeurs pour éviter ces problèmes.

a <- 3
if (a > 5) {
    b <- 2
}

a + b
# Error: object 'b' not found


Si b avait déjà une valeur différente assignée dans l’environnement, on aurait un gros problème!

R ne trouverait pas d’erreur, et la valeur de a + b serait entièrement différente!