250
Le logiciel R - Maˆ ıtriser le langage
.GlobalEnv est cr´ e´ e par le R. Il est appel´ e espace de travail (workspace en anglais) et tous les objets manipul´ es dans cette session en ligne de commande y
sont stock´ es. Mˆ eme si le but ici est uniquement de survoler ce concept, pr´ ecisons
que le concept de fonction d´ epend intrins` equement de la notion d’environnement. Sans rentrer dans les d´ etails, donnons-en juste un petit aper¸ cu. Lorsque
dans le corps d’une fonction, vous cr´ eez un nouvel objet, le R a pris le soin de
d´ eclarer en interne un environnement propre ` a cette fonction pour y stocker le
contenu de l’objet. La raison est que, si celui-ci a le mˆ eme nom qu’un objet
de l’environnement .GlobalEnv, ce dernier ne verra pas sa valeur ´ ecras´ ee par
celle de l’objet d´ efini dans le corps de la fonction. Pour mieux comprendre ` a
quoi correspond un environnement, pr´ ecisons qu’un objet d´ efini dans l’environnement .GlobalEnv a sa valeur accessible dans le corps de la fonction. Pour
autant, comme nous l’avons pr´ ecis´ e pr´ ec´ edemment, sa valeur ne pourra ˆ etre
modifi´ ee par une affectation avec le mˆ eme nom d’objet. L’acc` es ` a un objet d´ efini dans un environnement diff´ erent de celui associ´ e `
a la fonction s’explique par
le fait que la d´ eclaration d’un environnement est faite en pr´ ecisant un parent
qui est lui-mˆ eme un environnement. Un environnement peut cependant ne pas
avoir de parent comme c’est le cas pour l’environnement de d´ epart .GlobalEnv.
Ainsi, lorsqu’un objet n’est pas directement disponible dans l’environnement
d’une fonction, la recherche de l’objet est alors faite dans l’environnement parent. Si celui-ci n’est toujours pas disponible, il y a deux cas possibles : soit il
existe un environnement parent et la recherche de l’objet est poursuivie dans
celui-ci, soit il n’y en a pas et un message d’erreur est retourn´ e, pr´ ecisant que
l’objet est introuvable. Ce processus d’exploration est alors appliqu´ e r´ ecursivement jusqu’` a l’obtention ´ eventuelle de l’objet. La plupart des d´ eclarations
des environnements se font de mani` ere invisible en interne par le syst` eme R.
Nous reviendrons plus tard sur cette notion quand nous ´ evoquerons plus en d´ etail le d´ eveloppement de fonctions. Un point absolument surprenant est qu’un
environnement est lui-mˆ eme consid´ er´ e comme un objet R. On peut alors d´ eclarer un environnement afin d’ex´ ecuter une partie de code sp´ ecifique sans que
cela n’affecte l’espace de travail .GlobalEnv. La fonction local() prenant pour
premier param` etre d’appel le code ` a ex´ ecuter et pour deuxi` eme param` etre d’appel l’environnement o` u l’ex´ ecution doit se d´ erouler est particuli` erement utile
pour cela :
> a <- 12; b <- 13
> espace <- new.env() # Par défaut, le parent est celui où
# new.env est appelé.
> local({
+ a <- b+2
+ a
+ },espace)
[1] 15
> a # Valeur de a non modifiée dans .GlobalEnv.
[1] 12
> espace$a # Valeur de a dans l’environnement espace.
Précédent

- 283/701

Suivant