2015-04-01 17 views
6

Sto provando a caricare un mazzo * .Rdata in una lista.Carica i frame di dati nella lista

files <- paste0("name", 1:10, ".Rdata") 
data <- lapply(files, load) 

Questo crea un elenco, in cui in ogni elemento ha il nome del frame di dati, ma nient'altro.

Se ridefinire i file in modo tale che essa contiene solo il primo file, e chiamo:

load(files) 

Poi è "opere", ma il file in 'file' è assegnata per l'ambiente globale, che non è cosa vorrei

Vorrei finire con una lista, che in ogni elemento contiene il dataframe. Ad esempio, quando eseguo l'elaborazione dei dati, posso rimandare la lista.

+0

Questo può aiutare http://stackoverflow.com/questions/3764292/loading-many-files-at-once 'lapply (file, caricamento, .GlobalEnv)' – akrun

+0

Sì, sì, a tale proposito. Ma questo creerebbe un sacco di file nell'ambiente globale, no? – Repmat

+0

Scusate, quando ho commentato, ho letto solo la prima parte – akrun

risposta

7

Si può provare

lapply(files, function(x) mget(load(x))) 

mget restituirà il valore dell'oggetto (o gli oggetti) in un elenco. Nei tuoi file .Rdata, esiste un solo oggetto "data.frame" per file. Quindi, anche get dovrebbe funzionare.

Nel codice,

load(files[1]) 

Gli oggetti si trovano nel contesto globale. Supponiamo che l'oggetto sia 'd1', digitando 'd1' sulla console, si ottiene il valore dell'oggetto. Allo stesso modo

lapply(files, load, .GlobalEnv) 

carica l'oggetto nel contesto globale, e si può accedere digitando. La tua domanda, che presumo è quella di ottenere i valori in una lista e che può essere fatto con get o mget.

5

Ora testato, funziona!

e1 = new.env() 
invisible(lapply(files, load, envir = e1)) 
my_list = as.list(e1) 
+0

Siamo spiacenti, ma questo non funziona. – Repmat

+0

@ user3551644 Whoops, ovviamente non funziona perché 'lapply' non restituisce l'ambiente, quindi non può essere annidato. Risolto ora. – Gregor