• analyse-de-donnes-cestad
  • analytics_tools_original
  • data-minig1
  • data-minig2
  • Data-Mining-1030
  • Big-data-azzurro
  • marketing-statistics
Enquêtes
Collete des données
Traitement des données
Analyse des données
 
Programmation
Programmation statistique
Developpement des macros
Modélisation et plus encore
 
Data Mining
Exploration des données
Modélisation prédictive
Big Data
 
Formations certifiantes
Formations à la carte
Semilaires et conférences

 

 

R n'a pas de variables correspondant à des pointeurs ou des références comme ceux du langage C, par exemple. Cela peut rendre la programmation plus difficile dans certains
cas. (A ce jour, la version actuelle de R a un module expérimental appelé classes de référence, ce qui peut réduire la difficulté).
Par exemple, vous ne pouvez pas écrire une fonction qui change directement ses arguments. En Python, par exemple, vous pouvez faire ceci:

  1. >>> x = [13,5,12]
  2. >>> x.sort()
  3. >>> x
  4. [5, 12, 13]
Source code
Ici, la valeur de x, l'argument de sort (), a changé. En revanche, voici comment cela fonctionne dans R:

  1. > x <- c(13,5,12)
  2. > sort(x)
  3. [1] 51213
  4. >x
  5. [1] 13 5 12
Source code
L'argument de sort () ne change pas. Si nous voulons que x change dans ce code R, la solution est de réassigner les arguments:

  1. > x <- sort(x)
  2. >x
  3. [1] 51213
Source code
Et si notre fonction a plusieurs variables de sortie? Une solution consiste à les rassembler dans une liste, appeler la fonction avec cette liste comme argument, avoir la fonction retourner la liste, puis réassigner à la liste originale.
Un exemple est la fonction suivante, qui détermine les indices de nombres impairs et pairs dans un vecteur d'entiers:

  1. > oddsevens
  2. odds <- which(v %% 2 == 1)
  3. evens <- which(v %% 2 == 1)
  4. list(o=odds,e=evens)
  5. }
Source code
En général, notre fonction f () change les variables x et y. Nous pourrions les stocker dans une liste lxy, qui serait alors notre argument pour f (). Le code, à la fois appelé et appelant, peut avoir un modèle comme celui-ci:

  1. f <- function(lxxyy) {
  2. ...
  3. lxxyy$x <- ...
  4. lxxyy$y <- ...
  5. return(lxxyy)
  6. }
  7. # set x and y
  8. lxy$x <- ...
  9. lxy$y <- ...
  10. lxy <- f(lxy)
  11. # use new x and y
  12. ... <- lxy$x
  13. ... <- lxy$y
Source code
Cependant, cela peut devenir difficile si votre fonction change plusieurs variables. Cela peut être particulièrement gênant si vos variables, disons x et y dans l'exemple, sont elles-mêmes des listes, ce qui donne une valeur de retour constituée de listes dans une liste. Cela peut encore être géré, mais cela rend le code plus complexe du point de vue de la syntaxe et plus difficile à lire.
Les alternatives incluent l'utilisation de variables globales, que nous examinerons dans la section 7.8.4, et les nouvelles classes de référence R mentionnées précédemment.
Une autre classe d'applications dans laquelle le manque de pointeurs provoque des difficultés est celle des structures de données arborescentes. En général, le code C fait un usage intensif des pointeurs pour ces types de structures. Une solution pour R est de revenir à ce qui a été fait dans le «bon vieux temps» avant C, lorsque les programmeurs ont formé leurs propres «pointeurs» comme indices vectoriels.