Cargando muchos archivos a la vez?

Entonces digamos que tengo un directorio con muchos archivos .rdata

file_names=as.list(dir(pattern="stock_*")) [[1]] [1] "stock_1.rdata" [[2]] [1] "stock_2.rdata" 

Ahora, ¿cómo cargo estos archivos con una sola llamada?

Siempre puedo hacer:

 for(i in 1:length(file_names)) load(file_names[[i]]) 

pero ¿por qué no puedo hacer algo como do.call(load, file_names) ? Supongo que ninguna de las funciones de aplicación funcionaría porque la mayoría devolvería listas pero no se debería devolver nada, solo que estos archivos deben cargarse. Tampoco puedo hacer que la función get funcione en este contexto. Ideas?

lapply funciona, pero debe especificar que desea que los objetos cargados en .GlobalEnv se carguen en el entorno de evaluación temporal creado (y destruido) mediante lapply .

 lapply(file_names,load,.GlobalEnv) 

Por lo que vale, lo anterior no funcionó exactamente para mí, así que publicaré cómo adapté esa respuesta:

Tengo archivos en folder_with_files/ que están prefijados por prefix_pattern_ , todos son de tipo .RData , y se denominan con el nombre que quiero que se denominen en mi entorno R: por ejemplo: si hubiera guardado var_x = 5 , lo guardaría como prefix_pattern_var_x.Data en folder_with_files .

Obtengo la lista de nombres de archivos, luego genero su ruta completa para load , luego gsub las partes que no quiero: tomarlo (para object1 como ejemplo) de folder_with_files/prefix_pattern_object1.RData to object1 como objname a la que RData el objeto almacenado en el archivo RData .

 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 } ) 

Cargando muchos archivos en una función?

Aquí hay una versión modificada de la respuesta de Joshua Ulrich que funcionará de forma interactiva y si se coloca dentro de una función, reemplazando GlobalEnv con environment() :

 lapply(file_names, load, environment()) 

o

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

Ejemplo de trabajo a continuación. Escribirá archivos en su directorio de trabajo actual.

 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)