Chapter 27 Accessibilité des variables
Il est essentiel de pouvoir situer nos variables, et de savoir si elles sont définies et accessibles.
Les variables définies à l’intérieur d’une fonction ne sont pas accessibles à l’extérieur de la fonction!
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).
<- 3 # 'var1' est définie à l'extérieur de la fonction
var1 <- function() {
vartest <- 4 # 'a' est définie a l'intérieur
a print(a) # affiche 'a'
print(var1) # affiche 'var1'
}
# on ne peut pas afficher 'a', car 'a' n'existe qu'à l'intérieur de la fonction a
## [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.
<- 3 # var1 est définie à l'extérieur de la fonction
var1 <- function(var1) {
vartest print(var1) # affiche var1
}
vartest(8) # Dans notre fonction, var1 est maintenant notre argument et prend sa valeur
## [1] 8
# var1 a toujours la même valeur à l'extérieur de la fonction var1
## [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.
<- 3
a if (a > 5) {
<- 2
b
}
+ b a
# 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!