118 votes

Puis-je charger un objet R enregistré dans un nouveau nom d'objet ?

Lorsque vous enregistrez une variable dans un fichier de données R à l'aide de la fonction save il est enregistré sous le nom qu'il portait dans la session qui l'a enregistré. Lorsque je la charge ultérieurement à partir d'une autre session, elle est chargée avec le même nom, que le script qui la charge ne peut pas connaître. Ce nom pourrait é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 risquer d'écraser les variables existantes ?

Exemple :

Sauvegarde de la session :

x = 5
save(x, file="x.Rda")

Chargement de la session :

x = 7
load("x.Rda")
print(x) # This will print 5. Oops.

Comment je veux que cela fonctionne :

x = 7
y = load_object_from_file("x.Rda")
print(x) # should print 7
print(y) # should print 5

111voto

hadley Points 33766

Si vous n'enregistrez qu'un seul objet, n'utilisez pas d'élément .Rdata utiliser un fichier .RDS archivo:

x <- 5
saveRDS(x, "x.rds")
y <- readRDS("x.rds")
all.equal(x, y)

58voto

ricardo Points 1800

J'utilise les éléments suivants :

loadRData <- function(fileName){
#loads an RData file, and returns it
    load(fileName)
    get(ls()[ls() != "fileName"])
}
d <- loadRData("~/blah/ricardo.RData")

39voto

Hong Ooi Points 17761

Vous pouvez créer un nouvel environnement, charger le fichier .rda dans cet environnement et récupérer l'objet à partir de là. Cette méthode impose toutefois certaines restrictions : soit vous connaissez le nom original de votre objet, soit il n'y a qu'un seul objet sauvegardé 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 objet arbitraire est renvoyé.

load_obj <- function(f)
{
    env <- new.env()
    nm <- load(f, env)[1]
    env[[nm]]
}

31voto

by0 Points 1903

Vous pouvez également essayer quelque chose comme :

# Load the data, and store the name of the loaded object in x
x = load('data.Rsave')
# Get the object by its name
y = get(x)
# Remove the old object since you've stored it in y 
rm(x)

6voto

HBat Points 1096

Comme pour les autres solutions ci-dessus, je charge les variables dans une variable d'environnement. De cette façon, si je charge plusieurs variables à partir du fichier .Rda Ceux-ci n'encombreront pas mon environnement.

load("x.Rda", dt <- new.env())

Démonstration :

x <- 2
y <- 1
save(x, y, file = "mydata.Rda")
rm(x, y)

x <- 123
# Load 'x' and 'y' into a new environment called 'dt'
load("mydata.Rda", dt <- new.env())
dt$x
#> [1] 2
x
#> [1] 123

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X