Chapitre 6. Programmation en R
251
[1] 15
La fonction porte bien son nom puisque la valeur de a dans l’environnement
de travail .GlobalEnv a bien ´ et´ e pr´ eserv´ ee. Comme cela est pr´ ecis´ e en commentaire, le parent de espace g´ en´ er´ e via new.env() est ici .GlobalEnv, mais
on aurait pu le pr´ eciser en fournissant une valeur pour le param` etre formel
parent. Prenons deux exemples de d´ eclaration de parent.
> espace2 <- new.env(parent=emptyenv())
> local(a<-b+2,espace2) # Erreur !!!
Error in eval(expr, envir, enclos) :
impossible de trouver la fonction "<-"
> espace2$a
# Sans surprise, l’objet a n’existe pas!
NULL
L’environnement espace2 est tr` es peu utile, car son environnement parent
est un environnement vide (c’est-` a-dire pas de parent ; d´ eclar´ e `
a l’aide de la
fonction emptyenv()). L’erreur d’ex´ ecution dans le code local est due au fait que
mˆ eme l’affectation <- est une fonction qui est inaccessible, car l’environnement
vide ne connaˆ ıt vraiment rien du R et en particulier pas les fonctions de base de
R. La fonction globalenv() retourne l’environnement global .GlobalEnv qui
est toujours le premier dans la liste d’acc` es des environnements de R.
> espace3 <- new.env(parent=parent.env(globalenv()))
> local(a<-b+2,espace3) # Erreur, car b de .GlobalEnv est
# inaccessible!
Error in eval(expr, envir, enclos) : objet ’b’ introuvable
> local(a<-15,espace3)
> a
[1] 12
> espace3$a
[1] 15
L’environnement est finalement relativement agr´ eable ` a utiliser puisqu’il
s’utilise dans le mˆ eme style qu’une liste.
> espace3$b <- b-1
> b
[1] 13
> espace3$b
[1] 12
Pour plus de d´ etails sur le sujet, nous renvoyons le lecteur vers l’aide en
ligne assez compl` ete qui s’adresse tout de mˆ eme `
a des utilisateurs confirm´ es.
SECTION 6.5
† Interfacer R et C/C++ ou Fortran
Vous vous demandez peut-ˆ etre pourquoi vous devriez consid´ erer l’´ eventualit´ e de coder une partie de vos programmes en langage C/C++ ou Fortran ? Il
251
[1] 15
La fonction porte bien son nom puisque la valeur de a dans l’environnement
de travail .GlobalEnv a bien ´ et´ e pr´ eserv´ ee. Comme cela est pr´ ecis´ e en commentaire, le parent de espace g´ en´ er´ e via new.env() est ici .GlobalEnv, mais
on aurait pu le pr´ eciser en fournissant une valeur pour le param` etre formel
parent. Prenons deux exemples de d´ eclaration de parent.
> espace2 <- new.env(parent=emptyenv())
> local(a<-b+2,espace2) # Erreur !!!
Error in eval(expr, envir, enclos) :
impossible de trouver la fonction "<-"
> espace2$a
# Sans surprise, l’objet a n’existe pas!
NULL
L’environnement espace2 est tr` es peu utile, car son environnement parent
est un environnement vide (c’est-` a-dire pas de parent ; d´ eclar´ e `
a l’aide de la
fonction emptyenv()). L’erreur d’ex´ ecution dans le code local est due au fait que
mˆ eme l’affectation <- est une fonction qui est inaccessible, car l’environnement
vide ne connaˆ ıt vraiment rien du R et en particulier pas les fonctions de base de
R. La fonction globalenv() retourne l’environnement global .GlobalEnv qui
est toujours le premier dans la liste d’acc` es des environnements de R.
> espace3 <- new.env(parent=parent.env(globalenv()))
> local(a<-b+2,espace3) # Erreur, car b de .GlobalEnv est
# inaccessible!
Error in eval(expr, envir, enclos) : objet ’b’ introuvable
> local(a<-15,espace3)
> a
[1] 12
> espace3$a
[1] 15
L’environnement est finalement relativement agr´ eable ` a utiliser puisqu’il
s’utilise dans le mˆ eme style qu’une liste.
> espace3$b <- b-1
> b
[1] 13
> espace3$b
[1] 12
Pour plus de d´ etails sur le sujet, nous renvoyons le lecteur vers l’aide en
ligne assez compl` ete qui s’adresse tout de mˆ eme `
a des utilisateurs confirm´ es.
SECTION 6.5
† Interfacer R et C/C++ ou Fortran
Vous vous demandez peut-ˆ etre pourquoi vous devriez consid´ erer l’´ eventualit´ e de coder une partie de vos programmes en langage C/C++ ou Fortran ? Il
