Loading many files at once?

Loading many files in a function?

Here's a modified version of Joshua Ulrich's answer that will work both interactively and if placed within a function, by replacing GlobalEnv with environment():

lapply(file_names, load, environment())

or

foo <- function(file_names) {
  lapply(file_names, load, environment())
  ls()
}

Working example below. It will write files to your current working directory.

invisible(sapply(letters[1:5], function(l) {
  assign(paste0("ex_", l), data.frame(x = rnorm(10)))
  do.call(save, list(paste0("ex_", l), file = paste0("ex_", l, ".rda")))
}))

file_names <- paste0("ex_", letters[1:5], ".rda")
foo(file_names)

lapply works, but you have to specify that you want the objects loaded to the .GlobalEnv otherwise they're loaded into the temporary evaluation environment created (and destroyed) by lapply.

lapply(file_names,load,.GlobalEnv)

For what it's worth, the above didn't exactly work for me, so I'll post how I adapted that answer:

I have files in folder_with_files/ that are prefixed by prefix_pattern_, are all of type .RData, and are named what I want them to be named in my R environment: ex: if I had saved var_x = 5, I would save it as prefix_pattern_var_x.Data in folder_with_files.

I get the list of the file names, then generate their full path to load them, then gsub out the parts that I don't want: taking it (for object1 as an example) from folder_with_files/prefix_pattern_object1.RData to object1 as the objname to which I will assign the object stored in the RData file.

file_names=as.list(dir(path = 'folder_with_files/', pattern="prefix_pattern_*"))
file_names = lapply(file_names, function(x) paste0('folder_with_files/', x))
out = lapply(file_names,function(x){
  env = new.env()
  nm = load(x, envir = env)[1]
  objname = gsub(pattern = 'folder_with_files/', replacement = '', x = x, fixed = T)
  objname = gsub(pattern = 'prefix_pattern_|.RData', replacement = '', x = objname)
  # print(str(env[[nm]]))
  assign(objname, env[[nm]], envir = .GlobalEnv)
  0 # succeeded
} )

Tags:

R