J. Win.
J. Win.

Reputation: 6771

How to save() with a particular variable name

I am repeatedly applying a function to read and process a bunch of csv files. Each time it runs, the function creates a data frame (this.csv.data) and uses save() to write it to a .RData file with a unique name. Problem is, later when I read these .RData files using load(), the loaded variable names are not unique, because each one loads with the name this.csv.data....

I'd like to save them with unique tags so that they come out properly named when I load() them. I've created the following code to illustrate .

this.csv.data = list(data=c(1:9), unique_tag = "some_unique_tag")
assign(this.csv.data$unique_tag,this.csv.data$data)
# I want to save the data, 
# with variable name of <unique_tag>, 
# at a file named <unique_tag>.dat
saved_file_name <- paste(this.csv.data$unique_tag,"RData",sep=".")
save(get(this.csv.data$unique_tag), saved_file_name)

but the last line returns:

"Error in save(get(this_unique_tag), file = data_tag) : 
  object ‘get(this_unique_tag)’ not found"

even though the following returns the data just fine:

get(this.csv.data$unique_tag)

Upvotes: 31

Views: 18723

Answers (5)

dfrankow
dfrankow

Reputation: 21407

This worked for me:

env <- new.env()
env[[varname]] <- object_to_save
save(list=c(varname), envir=env, file='out.Rda')

You could probably do it without a new env (but I didn't try this):

.GlobalEnv[[varname]] <- object_to_save
save(list=c(varname), envir=.GlobalEnv, file='out.Rda')

You might even be able to remove the envir variable.

Upvotes: 0

minitechi
minitechi

Reputation: 144

you can use

save.image("myfile.RData")

Upvotes: 0

Karl Forner
Karl Forner

Reputation: 4414

You really should use saveRDS/readRDS to serialize your objects. save and load are for saving whole environments.

saveRDS(this.csv.data, saved_file_name)
# later
mydata <- readRDS(saved_file_name)

Upvotes: 16

Charles
Charles

Reputation: 4469

My preference is to avoid the name in the RData file on load:

obj = local(get(load('myfile.RData')))

This way you can load various RData files and name the objects whatever you want, or store them in a list etc.

Upvotes: 28

daroczig
daroczig

Reputation: 28632

Just name the arguments you use. With your code the following works fine:

save(list = this.csv.data$unique_tag, file=saved_file_name)

Upvotes: 35

Related Questions