1
Différences entre R et S le Mer 12 Nov - 15:32
Si R et S sont très similaires par la syntaxe, il existe quelque points de différences entre les deux. Dans R et S, à chaque fonction est associé un environnement (espace de nom, en programmation classique) propre. mais R fait une recherche ascendante dans les environnements crées, tandis que S fait la recherche descendate des variables libres associées aux fonctions.
Ainsi le code suivant,Ihaka et Gentelman (1996) donnera des résultats différents sur R et S :
y<-123
f<-function(x){
y<-x*x
g<-function() print(y)
g()
}
f(10) donnera 100 dans R et 123 dans S. Dans S, y est initialisé à 123 dans l'environnement initial défini comme suit
e1={y->123, e0}
ici e0 est l'environnement qui contient e1. quand f est définit e1 est modifié comme suit :
e1={y->123,f->deffunc1, e0}
defffunc est la définition assignée à f. Quand f(10) est appelée un environnement associé à f est crée il est contenu dans e1
et est défini définit comme:
e2={x->10; e1}
après exécution des deux premières lignes de la function
e2 est modifié comme suit :
e2={x->10, y->100,g->deffunc2; e1}
Quand g est invoquée, un nouvel environnement est crée e3. puisque g n'a aucun paramètre formel l'environnement se présente comme suit:
e3={; e1}
dans e1 la valeur de y vaut 123 et c'est celle qui est affichée. Dans R, e3 est défini comme :
e3={;e2}
dans e2 y vaut 100 et c'est cette valeur qui s'affiche.
Deux articles clés permettant de bien saisir les différences entre les deux, les avantages et inconvénients de deux modèles :
R: Language for Data Analysis and Graphics
Authors : Ross Ihaka and Robert Gentelman
source : Journal of Computational and Graphical Statistics, Vol. 5, No 3(Sep., 1996), pp 299-314
Lexical Scope and Statistical Computing
Authors : Robert Gentelman and Ross Ihaka
source : Journal of Computational and Graphical Statistics, Vol. 9, No 3(Sep., 2000), pp 491-508
Ainsi le code suivant,Ihaka et Gentelman (1996) donnera des résultats différents sur R et S :
y<-123
f<-function(x){
y<-x*x
g<-function() print(y)
g()
}
f(10) donnera 100 dans R et 123 dans S. Dans S, y est initialisé à 123 dans l'environnement initial défini comme suit
e1={y->123, e0}
ici e0 est l'environnement qui contient e1. quand f est définit e1 est modifié comme suit :
e1={y->123,f->deffunc1, e0}
defffunc est la définition assignée à f. Quand f(10) est appelée un environnement associé à f est crée il est contenu dans e1
et est défini définit comme:
e2={x->10; e1}
après exécution des deux premières lignes de la function
e2 est modifié comme suit :
e2={x->10, y->100,g->deffunc2; e1}
Quand g est invoquée, un nouvel environnement est crée e3. puisque g n'a aucun paramètre formel l'environnement se présente comme suit:
e3={; e1}
dans e1 la valeur de y vaut 123 et c'est celle qui est affichée. Dans R, e3 est défini comme :
e3={;e2}
dans e2 y vaut 100 et c'est cette valeur qui s'affiche.
Deux articles clés permettant de bien saisir les différences entre les deux, les avantages et inconvénients de deux modèles :
R: Language for Data Analysis and Graphics
Authors : Ross Ihaka and Robert Gentelman
source : Journal of Computational and Graphical Statistics, Vol. 5, No 3(Sep., 1996), pp 299-314
Lexical Scope and Statistical Computing
Authors : Robert Gentelman and Ross Ihaka
source : Journal of Computational and Graphical Statistics, Vol. 9, No 3(Sep., 2000), pp 491-508

Accueil


