Récupérer un data frame enregistré dans un .rda

R possède son propre format d'enregistrement de fichier. Un objet (e.g. un data frame) peut être enregistré dans ce format avec la fonction save. Symétriquement, la fonction load permet de charger dans l'environnement R un objet enregistré dans un tel fichier. Mais load ne renvoie pas l'objet contenu dans le fichier mais le nom de l'objet sous forme de chaîne de caractères. La raison de ceci est que save permet de sauver simultanément plusieurs objets et dans ce cas load renvoie un vecteur de chaînes de caractères contenant les noms des objets chargés.

Pour en revenir à l'intitulé de cette page, admettons que l'on ait enregistré un objet, un data frame, par exemple MonDataFrame pour fixer les idées. Si l'on a eut la bonne idée de nommer le fichier avec le nom de l'objet, i.e. MonDataFrame.rda, alors on sait que load("MonDataFrame.rda") va charger l'objet MonDataFrame dans l'environnement. Si le fichier porte un autre nom alors on peut récupérer le data frame par : DF_Name <- load("MonDataFrame.rda") DF <- eval(as.symbol(DF_Name)) DF_Name contient la chaîne de caractères de l'objet chargé par load("MonDataFrame"). La fonction as.symbol transforme cette chaîne de caractères en un symbole R, c'est à dire un nom d'objet, mais ce n'est pas encore l'objet. C'est le rôle de la fonction eval qui va "accéder" à l'objet désigné par le nom qu'on lui a donnée en argument. Au final cet objet est affecté à DF avec lequel on va pouvoir travailler.

L'exemple est artificiel, comme bien des exemples, car dans ce cas précis un simple ls après le load("MonDataFrame.rda") fera "apparaître" le data set chargé, à condition de ne pas avoir un nombre important d'objets dans l'environnement et dans une moindre mesure, de savoir quels étaient les objets présents avant le chargement. Considérons alors le cas d'une fonction prenant en argument au moins le nom d'un fichier contenant un data set enregistré au format .rda. L'intérêt de la fonction est de pouvoir s'adapter de manière aveugle à plusieurs fichiers et de pouvoir travailler avec les différents data set indépendamment de leurs noms : dans ce cas le recours au code ci-dessus peut s'avérer utile.