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:
Ici, la valeur de x, l'argument de sort (), a changé. En revanche, voici comment cela fonctionne dans R:
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:
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:
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:
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.