Lorsque vous enregistrez une variable dans un fichier de données R en utilisant save
, elle est enregistrée sous le nom qu'elle avait dans la session qui l'a enregistrée. Lorsque je vais plus tard le charger à partir d'une autre session, il est chargé avec le même nom, que le script de chargement ne peut pas connaître. Ce nom peut écraser une variable existante du même nom dans la session de chargement. Existe-t-il un moyen de charger en toute sécurité un objet à partir d'un fichier de données dans un nom de variable spécifié sans risque d'écraser les variables existantes?
Exemple:
Session de sauvegarde:
x = 5
save(x, file="x.Rda")
Session de chargement:
x = 7
load("x.Rda")
print(x) # This will print 5. Oops.
Comment je veux que ça marche:
x = 7
y = load_object_from_file("x.Rda")
print(x) # should print 7
print(y) # should print 5
r
variable-names
rdata
Ryan C. Thompson
la source
la source
saveRDS
etreadRDS
, en conséquence, enregistrez et restaurez tous les attributs de l'objet, y compris ceux créés par une application (viaattr
)? J'ai essayé d'utiliser cette approche au lieu desave
etload
, en essayant de trouver une solution de contournement à mon problème. Cependant, cela ne semble pas être le cas, sauf si je fais quelque chose de mal: stackoverflow.com/questions/23701195/… .J'utilise ce qui suit:
la source
Vous pouvez créer un nouvel environnement, charger le fichier .rda dans cet environnement et récupérer l'objet à partir de là. Cependant, cela impose certaines restrictions: soit vous connaissez le nom d'origine de votre objet, soit il n'y a qu'un seul objet enregistré dans le fichier.
Cette fonction renvoie un objet chargé à partir d'un fichier .rda fourni. S'il y a plus d'un objet dans le fichier, un arbitraire est renvoyé.
la source
new.env
vraiment nécessaire? L'appel de fonction lui-même ne fournit-il pas un environnement temporaire?Vous pouvez également essayer quelque chose comme:
la source
Au cas où quelqu'un chercherait à le faire avec un fichier source simple, plutôt qu'un fichier Rdata / RDS / Rda enregistré, la solution est très similaire à celle fournie par @Hong Ooi
Impressions:
Et dans le fichier source séparé TestSourceFile.R
Encore une fois, cette solution ne fonctionne que s'il y a exactement un fichier, s'il y en a plus, elle n'en retournera que l'un (probablement le premier, mais ce n'est pas garanti).
la source
J'étend la réponse de @ricardo pour permettre la sélection d'une variable spécifique si le
.Rdata
fichier contient plusieurs variables (car mes crédits sont faibles pour modifier une réponse). Il ajoute quelques lignes pour lire l'entrée utilisateur après avoir répertorié les variables contenues dans le.Rdata
fichier.la source
Fichier Rdata avec un objet
la source